gpt4 book ai didi

c++ - 如何预测 linux c/c++ 程序中的内存泄漏?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:28 24 4
gpt4 key购买 nike

我正在尝试预测 linux c++ 程序中的内存泄漏。

该程序是一个网络服务器,它派生了很多子进程来处理请求。

我可以在处理一个请求后获取进程的RSS,如果发现可能存在内存泄漏,我想让进程自行kill。

如果 RSS 大于配置值(比如 1GB),我可以让进程自行终止,但这看起来太简单了,而且这个值也不容易配置。

如果 RSS 越来越大 N 倍(比如 100),我也可以让进程自行终止,但是如果进程缓存了一些数据,这似乎也不合适。

有没有内存泄漏预测算法?

我用谷歌搜索过,但找不到。

谢谢。


抱歉没有把问题说清楚。

实际上我并不是想找到一些方法来查找内存泄漏,我知道有像 valgrind 这样的工具。

情况是这样的:

我写的程序是一个RPC框架,有一个父进程,会fork出很多子进程。

这些子流程会运行一些业务逻辑代码,这些代码不是我写的,我无法控制这些代码。

当这些逻辑代码泄漏内存时,子进程将被os OOM Killer杀死。

但此时,由于内存不足,操作系统会暂停一段时间(几分钟甚至更长时间)甚至崩溃,我们将不得不重新启动系统。

我想通过预测逻辑代码的内存泄漏并让子进程在 OOM Kill 完成它的工作之前自行终止来避免这种情况。

如果子进程kill自己,父进程会fork另一个子进程来运行逻辑代码。

我可以得到子进程处理一个请求后占用的内存。

所以最简单的方法就是检查子进程占用的内存是否超过预先配置的值(如1GB),如果是,则让其自行杀死。

但是这个算法看起来太简单了,值也不好配置。

所以我发现的是一种算法,可以预测进程中是否存在内存泄漏。

谢谢

最佳答案

你无法预测内存泄漏(它可能被证明等同于 halting problem )。

您可以测量或检测二进制文件,特别是使用 valgrind (它只会告诉您某些特定执行是否已泄露)。

您也可以考虑使用 Boehm's conservative garbage collector .它通常会自动释放内存(但不能保证,因为它是保守的 garbage collector !)。

关于c++ - 如何预测 linux c/c++ 程序中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21988298/

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