【发布时间】:2023-09-14 10:10:01
【问题描述】:
我有一个使用来自http://www.jejik.com/files/examples/daemon.py 的模块的python2.7 守护进程
这个进程很重,大约有 40 GB RAM 使用量和 9 个子线程。服务器使用 RHEL 6.3,具有 192 GB RAM 和足够的 CPU 能力。
启动该进程后,它会持续大约 3-7 个小时,但随后它被某人杀死,可能是内核。但是我在 dmesg 和内核日志(我手动激活)中找不到任何提示,那里什么都没有。当不作为守护进程启动时,我只是在终端中收到消息:“killed”。
已做好以下预防措施:
- 在 /proc//oom_score_adj 中重置 oom 分数,以便 oom 杀手在资源排序时不会选择进程
- 将所有 rlimits(可以增加)增加到最大值
- 设置进程 nice/priority 更高 (prio -15)
这个问题在采取这些预防措施之前就已经存在,所以他们不负责杀戮
我还有一种机制可以捕获所有异常、STDERR、STDOUT 并将所有内容记录到旋转的日志文件中。但是在进程结束之前并没有什么有趣的事情。
进程中使用的模块包括:oracle_cx、ibm_db、suds、wsgi_utils。但是他们总是在发生错误时写入日志。
有人知道如何追溯杀戮吗?谁和为什么?
提前谢谢你
【问题讨论】:
-
您是否启用了 coredump 以查看您是否在 kill 时获得转储?
-
不,我没有。问题是,我们使用大约 128 GB 的 SSD,当进程有 40 GB RAM 时,没有足够的空间用于核心转储。
-
鉴于您的大 RAM 并假设您的进程不会暂时填满整个内容(这会导致内核杀死它),您可以将 coredump 存储在 RAM 上(通过 tmpfs)。跨度>