Python脚本在Ubuntu 12.04中被终止

2 投票
1 回答
3790 浏览
提问于 2025-04-21 06:33

我现在正在Ubuntu 12.04上运行一个需要很长时间才能完成的Python脚本。这个机器是在Digital Ocean的云服务器上。运行过程中没有明显的内存泄漏(用top命令查看内存使用情况是稳定的)。这个脚本运行了大约12个小时,没有出现任何问题(没有未捕获的异常,使用的内存也没有增加),但最后还是被杀掉了。

在系统日志中,和这个脚本相关的消息只有:

Sep 11 06:35:06 localhost kernel: [13729692.901711] select 19116 (python), adj 0, size 62408, to kill

Sep 11 06:35:06 localhost kernel: [13729692.901713] send sigkill to 19116 (python), adj 0, size 62408

我之前在Ubuntu 12.04上遇到过类似的问题(用其他脚本),那时候的日志里有额外的信息,说明这些脚本是被oom-killer杀掉的。

这些脚本,包括现在这个,最多只占用了可用内存的30%。

因为我找不到代码本身有什么问题,那这可能是操作系统的问题吗?如果是的话,我该怎么解决呢?

1 个回答

5

你的程序确实是被“内存杀手”给干掉了。日志信息中的“select … to kill”就是这个意思。

可能你的脚本并没有做错什么,但它被选中杀掉是因为它占用了最多的内存。

你需要提供更多的可用内存,可以通过增加更多的(虚拟)内存来实现,如果可以的话,或者把其他服务从这台机器上移到另一台机器上,或者尝试优化你脚本的内存使用。

你可以参考一下 如何通过 /var/log/messages 调试内存不足的问题 来获取一些调试的建议。你也可以尝试让你的脚本不被杀掉:如何永久设置内存杀手的调整? 但通常随机杀掉某个进程可能会让整台机器变得不稳定。最终,你需要理清内存的需求,确保在高峰期有足够的内存可用。

撰写回答