当前位置: 首页 > 科技观察

如何在无响应的Linux系统上终止最耗内存的进程?

时间:2023-03-18 12:41:33 科技观察

作为博主,我收集了Linux和Unix相关内容的博客、网站和论坛。有时我在浏览器中打开了太多选项卡,以至于操作系统在几分钟内没有响应。我无法移动鼠标、终止进程或关闭任何打开的选项卡。遇到这种情况,只好强行重启系统。当然我也用过OneTab(LCTT译注:OneTab是Chrome的一个Extension,可以将标签页转换成列表保存。)和GreateSuspender(LCTT译注:GreatSuspender是Chrome的一个Extension,可以自动冻结标签页)就像这个浏览器扩展一样,但它们在这里也做不多。我经常用完内存。这就是EarlyOOM发挥作用的地方。在严重的情况下,它会在无响应的系统上杀死占用内存的***进程。EarlyOOM每秒检查10次可用内存和空闲交换区,一旦两者都低于10%,它将杀死活动进程。为什么要使用EarlyOOM?为什么不用系统自带的OOMkiller呢?在继续讨论之前,我想简单介绍一下OOMkiller,也就是OutOfMemorykiller。OOM杀手是内核在可用内存非常低时使用的进程。它的主要任务是不断杀死进程,直到释放出足够的内存,让运行在内核中的其他进程顺利运行。OOMkiller会找到系统中释放最多内存的最不重要的进程,并杀死它们。在/proc目录下的pid目录下,我们可以看到各个进程的oom_score。示例:$cat/proc/10299/oom_score1进程的oom_score值越高,当系统内存不足时,进程越有可能被OOMkiller杀死。EarlyOOM的开发者表示,相比内置的OOMkiller,EarlyOOM有很大的优势。正如我之前所说,OOMkiller会杀死带有oom_score***的进程,这也导致Chrome浏览器始终是第一个被杀死的进程。为了防止这种情况发生,EarlyOOM使用/proc/*/status而不是echof>/proc/sysrq-trigger(LCTT译注:该命令会调用OOMkiller来杀死进程)。开发者还表示,手动触发OOMkiller很可能在最新版本的Linux内核中不起作用。安装EarlyOOMEEarlyOOM在AUR(Arch用户存储库)中可用,因此您可以在Arch及其衍生产品上使用任何AUR工具安装它。使用Pacaur:pacaur-Searlyoom使用Packer:packer-Searlyoom使用Yaourt:yaourt-Searlyoom启用并启动EarlyOOM守护进程:sudosystemctlenableearlyoomsudosystemctlstartearlyoom在其他Linux发行版中,可以按如下方式编译安装它:gitclonehttps://github.com/rfjakob/earlyoom.gitcdearlyoommakesudomakeinstallEarlyOOM-在无响应的Linux系统中杀死***进程运行以下命令启动EarlyOOM:如果是通过编译源安装的earlyoom代码是的,运行以下命令启动EarlyOOM:./earlyoom示例输出:earlyoom0.12memtotal:3863MiB,min:386MiB(10%)swaptotal:2047MiB,min:204MiB(10%)memavail:1770MiB(45%),无交换空间:2047MiB(99%)可用内存:1773MiB(45%),无交换空间:2047MiB(99%)可用内存:1772MiB(45%),无交换空间:2047MiB(99%)%)可用内存:1773MiB(45%),免费交换:2047MiB(99%)可用内存:1772MiB(45%),免费交换:2047MiB(99%)可用内存:1773MiB(45%),免掉期:2047MiB(99%)可用内存:1771MiB(45%),免费交换:2047MiB(99%)可用内存:1773MiB(45%),免费交换:2047MiB(99%)可用内存:1784MiB(46%),无交换空间:2047MiB(99%)[…]正如您在上面的输出中看到的,EarlyOOM将显示您有多少内存和交换空间,以及有多少内存和交换空间可用记住它会一直运行,直到您按下CTRL+C。如果可用内存和交换区大小都低于10%,EarlyOOM将自动杀死活动进程,直到系统有足够的内存才能顺利运行。您也可以根据需要配置最小百分比值。要设置最小可用内存百分比,请运行:earlyoom-m要设置最小可用交换空间百分比,请运行:earlyoom-s在帮助部分,您可以看到更多详细信息:$earlyoom-hearlyoom0.12Usage:earlyoom[OPTION]...-mPERCENT将可用内存最小值设置为总数的PERCENT(默认为10%)-sPERCENT将可用内存最小值设置为总数的PERCENT(默认为10%)-MSIZE将可用内存最小值设置为SIZEKiB-SSIZE将空闲交换最小值设置为SIZEKiB-k使用内核oomkiller而不是自己的用户空间实现-i用户空间oomkiller应该忽略正的oom_score_adj值-d启用调试消息-v打印版本信息并退出-rINTERVAL内存报告间隔(默认为1),设置为0以完全禁用-p将earlyoom的niceness设置为-20并将oom_score_adj设置为-1000-hthishelptext现在,您不必担心内存占用***进程了。希望这对你有帮助。更多好内容即将到来,敬请期待。