gpt4 book ai didi

linux - Linux内核在什么情况下会杀死泄漏内存的进程?

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:47 28 4
gpt4 key购买 nike

我检测到我的服务进程在 Linux 服务器上泄漏内存,它占用了 1.2G 物理内存并且消耗越来越多。

当我查看内存泄漏的代码时,我注意到该进程已重新启动(该进程如果由supervisord管理,因此如果被杀死,它会重新启动)。进程的日志中没有错误日志或panic。所以我的猜测是它被内核杀死了。

内核什么时候会杀死一个正在泄漏内存的进程?什么时候消耗太多内存?或者它分配内存太快?

最佳答案

内存泄漏可能会导致系统内存不足。如果内存变得非常低,则会调用 OOM(内存不足) killer 来尝试从低内存状态恢复。 OOM Killer 将终止一个或多个消耗更多内存且最不重要(低优先级)的进程。通常,如果没有可用的用户地址空间或没有可用的页面,则会调用 OOM Killer。

OOM Killer 使用 select_bad_process(),badness() 来确定并终止进程。这些函数根据各种因素(例如进程的 VM 大小、其子进程的 VM 大小、正常运行时间、优先级、是否进行任何硬件访问、是否是交换器、init 或内核线程)为所有进程分配点/分数来确定进程。具有最高分/分数(坏)的进程被终止/杀死。

此外,检查内核的过度使用行为(/proc/sys/vm/overcommit_memory、/proc/sys/vm/overcommit_ratio)以及进程地址空间的限制是否合适。

在这种情况下,Valgrind 是一个非常方便的工具来识别内存泄漏。

关于linux - Linux内核在什么情况下会杀死泄漏内存的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748209/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com