内存使用:程序分配了太多内存
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
我用 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