SSo*_*lid 0 c c++ linux algorithm memory-leaks
我想在linux c ++程序中预测内存泄漏.
该程序是一个网络服务器,它分叉了很多子进程来处理请求.
在处理完一个请求之后,我可以获取进程的RSS,如果发现可能存在内存泄漏,我想让进程自行终止.
如果它的RSS大于配置值(如1GB),我可以让进程自行终止,但这看起来太简单了,这个值也不容易配置.
如果RSS越来越大且N次(如100),我也可以让进程自行终止,但是如果进程缓存一些数据,这似乎也不合适.
有没有内存泄漏预测算法?
我用Google搜索了,但找不到一个.
谢谢.
很抱歉没问题.
其实我并没有试图找到一些方法来查找内存泄漏,我知道有像valgrind这样的工具.
情况是这样的:
我编写的程序是一个RPC框架,有一个父进程,它将分叉许多子进程.
这些子进程将运行一些业务逻辑代码,这些代码不是由我编写的,我无法控制这些代码.
当这些逻辑代码泄漏内存时,子进程将被os OOM Killer杀死.
但在那时,由于内存不足,操作系统会停止一段时间(几分钟甚至更长时间)甚至故障,我们将不得不重新启动系统.
我希望通过预测逻辑代码的内存泄漏来避免这种情况,并使子进程在OOM Kill执行它之前自行终止.
如果子进程自行终止,则父进程将分叉另一个子进程来运行逻辑代码.
在处理一个请求后,我可以获得子进程占用的内存.
因此,最简单的方法是检查子进程是否占用了比预先配置的值(如1GB)更多的内存,如果是,则使其自行终止.
但是这个算法看起来太简单了,价值也不容易配置.
所以我发现的是一种算法来预测过程中是否存在内存泄漏.
谢谢
你无法预测内存泄漏(它可能被证明等同于暂停问题).
您可以测量或检测二进制文件,特别是使用valgrind(它只会告诉您某些特定执行是否泄漏).
你也可以考虑使用Boehm的保守垃圾收集器.它通常会自动释放内存(但由于它是一个保守的 垃圾收集器,因此无法保证!).