我目前正在为 Linux 开发一个 C 网络应用程序。它基于DPDK。我已经使用 valgrind 执行了该应用程序,它没有显示任何内存泄漏。我也尝试过 Intel Inspector 2016,结果相同。但是,当我让我的应用程序在系统(AWS EC2 实例)上运行几天,同时监控 RAM 使用情况(Cloudwatch)时,它显示 RAM 不断、线性且缓慢地增加(大约 1 MB/天)。我怎样才能找到这个泄漏?
最佳答案
调试此问题的一种方法是编写一些代码来监视所有内存分配和所有解除分配。通过这样的监控代码,您将能够找到分配的内存“在哪里”。
由于您使用的是 Linux,因此这可能是一个起点:
http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Hooks-for-Malloc.html
第一个测试可能是检查程序关闭时是否释放了所有分配的内存。这将告诉您是否存在泄漏或已用内存的累积。
关于无法找出C应用程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37362415/