Linux上的多线程C应用程序中的内存泄漏

我们有一个在 Linux上运行的大型多线程C应用程序.我们看到应用程序内存占用的速度越来越快,并且相信存在一些泄漏.我们已经尝试了我们拥有的每一种工具(valgrind,DynLeak,Purify),但没有找到任何东西.由于此应用程序可以在Windows上运行,我们还尝试了Bounds Checker.也没有帮助.

我们需要一种可以提供帮助的新工具.我查看了Google Perfomrance Tools,MMGR by Paul Nettle,MemCheck Deluxe.他们都没有给我留下深刻印象.

这个任务有什么好的工具吗?

C/C++中内存泄漏的定义非常具体:它是已分配的内存,然后指针被覆盖或以其他方式丢失. Valgrind通常会开箱即用,但事情并非总是如此简单.

>您的应用程序很可能仍在使用该内存.在这种情况下,您可能拥有Java程序员认为泄漏的内容,例如在结构中输入数据,很少(或从不)删除条目.
>您可能错误地测量了内存的内存使用情况.在Linux上,内存使用量测量并不像它们看起来那么简单.你是如何衡量你的内存使用量的?
>您应该考虑使用您正在使用的任何内存分析工具的应用程序挂钩(Valgrind称之为client requests),以避免报告仅在程序终止时发出的问题.使用这些钩子可能会帮助您精确定位泄漏的位置.
>您应该尝试使用堆分析器(例如Valgrind的massif)来查找具有过多分配内存量的内存分配位置.
>确保您的应用程序中没有使用自定义分配器或垃圾收集器.据我所知,没有user interference,没有内存分析工具可以使用自定义分配器.
>如果您的内存泄漏量足以在可接受的应用程序运行时间内检测到,您可以尝试通过版本控制系统对旧版本进行二进制搜索,以识别引入问题的提交.至少Mercurial
Git为此任务提供内置支持.

相关文章
相关标签/搜索