Linux c应用程序内存使用情况



我有一个C Linux应用程序,它使用malloc、calloc、realloc&免费功能。即使所有分配的内存都被释放(通过包装*alloc和free来验证(,VmSize、VmRSS&VmData的数量不断增加,最终应用程序被OOM杀手杀死。

为什么VmSize、VmRSS&VmData持续增长?如果是内存管理问题,有什么可以避免的指针吗?

我在C中看到了这个问题使用内存,但答案并不能解释OOM行为。

您应该首先使用valgrind(调试潜在的难以发现的内存泄漏或不当行为(。不要忘记使用gcc -Wall -g编译(然后,当它工作时,使用-Wall -O(;当然,要改进代码,直到没有警告为止。

你可能会(如果算法合适的话(尝试(有用地(分配内存区域,例如二次幂,或者二次幂的3倍[可能减去2或3个单词];至少要尽量避免太多不同随机大小的分配。

您可能想尝试使用Boehm的保守垃圾收集器,即用GC_MALLOC替换所有malloc(或用GC_STRDUP替换GC_MALLOC_ATOMICstrdup(,用GC_FREE替换free,等等

至少出于测试目的,使用setrlimit(2(可能是通过bash-ulimit内置的。你想要RLIMIT_AS——可能有RLIMIT_DATA(合理地设置这些限制可以避免OOM杀手,并使你的mmap——由malloc调用——在内存耗尽时失败(。

您可能想要使用GCC 4.8进行编译,它接受-fsanitize=address。

您还可以实现自己的特定于应用程序的垃圾收集器(阅读该Wiki页面,它为您提供了见解和术语(;标记&紧凑算法将对抗碎片化。

另请参阅这个关于内存碎片的问题。查看"插头"工具。

相关内容

  • 没有找到相关文章

最新更新