无法找出C应用程序中的内存泄漏

标签 c memory-leaks network-programming

我目前正在为 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/

相关文章:

java - 减少java中的内存使用

linux - getnameinfo 返回带有 "%<interface>"的数字名称

c - 如何打印一个 int struct 成员

c - 从 .txt 文件中读取名称并将其添加到链接列表中

c++ - 有没有办法为所有堆 userptr 获取 userstack

无法检测 xcode 9 仪器中的 C 泄漏

c++ - 尝试连接自签名证书时出现 QT 5.5 SSLHandshakeFailedError

c++ - 如何使用ZeroMQ监听和解析特定端口上的UDP数据?

c - 在 C 中,malloc(256) 和 malloc(sizeof(char)*256) 等价吗?

c - 无法使用 fork 退出子进程