我想咨询一下这个问题
我有一个我正在运行的程序,从长远来看,它的内存不断增加,直到所有资源耗尽,当然它会崩溃(需要几天才能达到临界大小)。
到目前为止,我所做的是使用Valgrind,找到所有内存泄漏并修复它们,但现在我仍然有一个小内存泄漏,这是由于堆大小增加引起的,为此我使用了Valgrind massif工具。
问题是,当我使用massif时,它不能运行太长时间,并且它导致应用程序在几个小时后崩溃。我试图找到一个小时运行的内存泄漏,最小阈值不能从内存的1%降低的问题,1小时后,我可以看到内存增加,但与应用程序的其余部分相比,它仍然很小需要更多记忆的部分,但我看不出是哪部分
example in valgrind output file:
->03.11% (4,377,152B) in 28 places, all below massif's threshold (01.00%)
有什么想法吗?
你可以链接你的程序,甚至LD_PRELOAD库,它会配置你的堆使用生成快照,它不会影响你的性能,当你看到堆已经太大了,你可以停止它内存花在哪里的图表。
编辑:教程在这里
您是否使用了带-lele-check--ful的valgrind?你用的是什么可以用记忆?你删除了每一个新的?
也许你崩溃了,因为你正在分配一个巨大的内存空间(发生在我之前),而valgrind有时看不到它。
反正就是“奇怪”,找到了就告诉我们答案吧!