如何防止如此多的apt-check实例运行?


18

我有一台Ubuntu 12.04服务器,它由于一个非常明显的原因而崩溃了:30多个apt-check进程消耗了所有内存,OOM杀手kick进来,杀死了重要的服务。我不确定apt-check进程来自何处,但是我想我的Nagios / Icinga插件check_apt可能会使用它,以及byobu状态行可能想要显示其输出。我猜有些东西被锁住了,所有进程都在等待,但仍在记忆。

如何防止系统上有如此多的实例apt-check?这对我来说没有意义,应该在无法获得dpkg数据库的读取锁定后立即退出。

看来我并不是唯一一个在这里遇到麻烦的人。的所有建议apt-check都是负面的:

在此处输入图片说明

(干净的浏览器,未登录,没有个性化搜索)

Answers:


8

一些深入的研究apt-check为我提供了一些线索,因为它是一个非常钝的脚本,需要修复。在充分尊重作者的前提下,它在我的服务器上出现了故障。这是我的想法:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • 自己强制nicelevel 19
  • 没有设置动作超时

后两者的结合使它可以无限螺旋地向下堆积。如果将系统用于更高优先级的其他目的,则进程数量只会增加,而且没有止境,因为apt-check永远不会获得优先级。仅当OOM杀手决定杀死您的重要系统进程时,问题才会变得更糟。

如果行为的这两个方面中的任何一个都不相同,那将是我的假设,即不允许系统最终处于这种破裂状态。

虽然字符串也说明父进程对此负责,但我认为以下几点是缺陷,apt-check必须报告为错误才能正确解决:

  • 它应该暗示OOM杀手先杀了自己
  • 它不应该设置nicelevel硬编码
  • 如果花费不合理的时间获取信息,则应该退出

实际上,似乎Linux OOM杀手正在对此进行一些启发。良好的流程将获得更高的分数,而长时间运行的流程将减少。(来源 -由于乌尔里希Dangel它指向了

我可能提出的可能解决方案:

  • 处理后缓存结果
  • 如果少于N秒,则输出缓存,而不为每次简单(甚至--help)调用加载所有Python-APT库。
  • 使nicelevel可配置-请允许我更改/禁用此功能!我相信将其设置为0实际上会有所帮助
  • 有增加OOM杀手的分数

我认为您已经错过了它应该做的最大的事情:使用一个锁文件,并且不允许一次运行多个实例。
derobert 2013年

@derobert这是一个脚本,任何用户都可以运行,而无需在Ubuntu上具有特定特权,而不是守护进程。还是可以安全地将/var/run/ /tmp用作此可读取/写入的世界锁定文件?漏洞很大:添加锁定文件,系统更新不会通知管理员!
gertvdijk

无论自动启动它(导致运行30多个副本),都需要进行锁定。或者它可以自己针对每个用户执行。无论哪种方式,这都是需要解决的错误。
derobert

Nagios / Icinga似乎避免了陷阱。至少,它有大约10秒的超时时间,并警告是否超过了它。(尽管我找不到如何配置超时-我希望使用更长的时间)。Deo上的Byobu对我造成了问题。在Ubuntu上应该是固定的
sourcejedi

4

您需要找出产生apt-check的进程。您可以使用ps之类的东西来获取进程树。

ps -A --forest

如果apt-check没有父母,那么apt-check自身而不是某个特定程序可能会出现问题。如果是这种情况,我将尝试调试apt-check。


谢谢。给了我一些想法以供进一步研究。但是,这使我认为这确实是一个问题apt-check-请参阅我自己的答案
gertvdijk 2013年

如果要消耗内存和CPU时间,那就不是僵尸了。
吉尔(Gilles)'所以

@吉尔斯好点。
2013年

0

基于Ubuntu 12.04编写

我有同样的问题,发现这是因为byobu,如果我只是apt-get update不使用byobu,就不会有任何check-apt处理。此外,本发明涉及update-notifier包,当我删除那些软件包(更新通告程序共用,更新通知程序),使用byobu和运行apt-get update,它运行另一个命令,但完全一样的存储器使用:apt-get -s -o Debug::NoLocking=true upgrade

其他一些事情可能会运行apt-get update(但可能不会运行check-apt

在台式机上,可能涉及更多事情。

结论: byobu在您运行apt-get update并触发这些check-apt进程时捕获事件,请重新配置其状态栏byobu以解决此问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.