我有一个 Ubuntu 12.04 服务器,由于一个非常明显的原因而崩溃:30 多个apt-check
进程消耗了所有内存,OOM 杀手启动,杀死了重要服务。我不确定apt-check
进程来自哪里,但我猜我的 Nagios/Icinga 插件check_apt
可能会使用它,并且byobu
状态行可能想要显示其输出。我猜有什么东西被锁住了,所有的进程都在等待,但保留着内存。
我怎样才能防止系统上有这么多实例apt-check
?这对我来说没有意义,它应该在无法获得 dpkg 数据库的读取锁定时立即退出。
似乎我不是唯一在这里遇到麻烦的人。的所有建议apt-check
都非常消极:
(干净的浏览器,未登录,无个性化搜索)
一些深入研究apt-check
给了我这些线索,因为它是一个需要修复的非常生硬的脚本。恕我直言,它的作者在我的服务器上失败了。以下是我的想法:
apt-check
== /usr/lib/update-notifier/apt_check.py
后两者的结合使其能够以螺旋式向下无休止地堆积。如果系统用于其他具有更高优先级的目的,进程数量只会增加并且没有止境,因为apt-check
永远不会获得任何优先级。一旦 OOM 杀手决定杀死您的重要系统进程,麻烦只会变得更糟。
如果这两个方面的行为中的任何一个不同,那么我的假设是不会让系统最终处于如此破碎的状态。
虽然字符串对于父进程也负责,但我相信以下几点是缺陷,apt-check
必须报告为错误才能得到正确解决:
实际上,Linux OOM 杀手似乎正在对此进行一些启发。Niced 流程将获得更高的分数,而长时间运行的流程将减少。(来源-由于乌尔里希Dangel为它指向了)
我可能提出的可能解决方案:
--help
)调用加载所有 Python-APT 库。