python 守护进程被杀死(被内核?)

标签 python linux daemon rhel

我有一个 python2.7 守护进程使用来自 http://www.jejik.com/files/examples/daemon.py 的模块

该进程是一个繁重的进程,使用了大约 40 GB RAM 和 9 个子线程。服务器使用具有 192 GB RAM 和足够 CPU 能力的 RHEL 6.3。

进程启动后,大概持续3-7个小时,然后被人kill掉了,可能是kernel。但是我在 dmesg 和内核日志(我已手动激活)中找不到任何提示,那里什么都没有。当不作为守护程序启动时,我只是在终端中收到消息:“killed”。

做了以下预防措施:

  • 重置/proc//oom_score_adj 中的 oom 分数,以便 oom killer 在排序资源时不会选择进程
  • 将所有 rlimits(可以增加)增加到最大值
  • 设置进程 nice/priority 更高 (prio -15)

这个问题在采取这些预防措施之前就已经存在,所以他们不对杀戮负责

我还有一种机制可以捕获所有异常、STDERR、STDOUT 并将所有内容记录到循环日志文件中。但是就在进程死亡之前没有什么有趣的。

流程中使用的模块包括:oracle_cx、ibm_db、suds、wsgi_utils。但是他们都在发生错误时总是写日志。

有人知道如何追查杀人事件吗?谁和为什么?

提前致谢

最佳答案

要查看进程被终止时谁登录了,请使用命令 last

如果当时没有人登录,则进程被某些信号杀死。

由于这是 Python,找出终止进程的最简单方法是为所有信号编写一个信号处理程序并记录它们。参见 here how to write a signal handler .参见 this question how to catch them all .

如果您获得核心转储,请连接一个具有足够空间的外部硬盘。或者使用 ulimit 将核心大小限制为 1GB;这可能足以看出它崩溃的地方。

或者,使用像 gdb 这样的调试器启动进程;当“核心转储”信号发送到进程时,它将确保您得到提示。

关于python 守护进程被杀死(被内核?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16395082/

相关文章:

Cocoa Launch 代理在安装后自行注册

python - 如何使用 sha-512 生成 hmac?

python - 组合梵文字符

linux - 在unix下安装软件最好的地方是哪里?

node.js - 如何从 CLI 停止 Yarn Package Manager 脚本

linux - 在 bash 上对版本字符串进行排序

hadoop - hadoop_starting daemon_no文件或目录错误

java - 作为守护进程运行 java jar 文件并指定 pid 路径

python - 在 xarray dataarray 中重命名 __xarray_dataarray_variable__

python - 当单词不在句子中时无法让程序打印 "not in sentence"