内存使用:程序分配了太多内存

Memory usage: Program allocates too much memory

我用 C++ 为 Ubuntu 服务器(64 位)编写了一个程序,应该 运行 24/7。服务器有 2GB RAM,但显然我的程序分配了太多内存。

这是 top 大约 2 小时后的输出

top - 13:35:57 up  1:39,  1 user,  load average: 0.15, 0.13, 0.08
Tasks:  68 total,   2 running,  66 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.9 us,  5.7 sy,  0.0 ni, 92.3 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   2050048 total,   540852 used,  1509196 free,    34872 buffers
KiB Swap:  1509372 total,        0 used,  1509372 free.    93060 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  902 root      20   0 1019896 364920   4492 S 13.1 17.8  13:07.03 Bether

你怎么看我的代码已经消耗了 17.8% 的内存。在某些时候,服务器会因为没有剩余内存而崩溃。

我的问题是程序不应该那样做,但我无法找出内存分配的位置和不再释放的位置。是否有工具,甚至可能在 gdb 内,可以找出程序在何处分配最多内存?

提前致谢!

查看 Valgrind,它应该在 Ubuntu 存储库中。它可以为您提供有关 C++ 程序中内存使用情况的详细信息。有点像内存使用调试器。

valgrind --tool=memcheck <your_app> <your_apps_params>

另请查看 ccmalloc, NJAMD, LeakTracer