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

时间:2015-09-07 13:43:00

标签: linux ubuntu memory-management gdb

我用C ++编写了一个用于Ubuntu Server(64位)的程序,该程序应该全天候运行。服务器有2GB内存,但显然我的程序分配了太多的内存。

这是约2小时后top的输出

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内,找出程序分配最多内存的位置?

提前致谢!

1 个答案:

答案 0 :(得分:5)

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

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

另请查看ccmallocNJAMDLeakTracer