内存使用量:程序分配了过多的内存。

5

我已经用C++为Ubuntu服务器(64位)编写了一个程序,应该运行24/7。服务器有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中内置?

提前感谢!


这个问题与编程更相关,而不是与管理相关!无论如何,您可以尝试使用 valgrind 来查看是否存在内存泄漏。 - Khaled
是的,我不太确定应该放在哪里。我会看一下valgrind,谢谢! - Bobface
1个回答

5

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

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

此外,请查看ccmallocNJAMDLeakTracer


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接