2015-09-07 8 views
5

24/7を実行するUbuntu Server(64-Bit)用のC++プログラムをコーディングしました。サーバーは2GBのRAMを持っていますが、明らかに私のプログラムはあまりにも多くのメモリを割り当てています。メモリ使用量:プログラムがあまりにも多くのメモリを割り当てる

これは約2時間、あなたが私のコードはすでに17.8%のメモリを消費見ることができますどのように

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 

topの出力です。ある時点で、メモリが残っていないため、サーバーはクラッシュします。

私の問題は、プログラムがそれをしてはならないということですが、メモリがどこに割り当てられ、free'dではないのか分かりません。プログラムが最も多くのメモリを割り当てる場所を知るためのツールがありますか?gdbの中にもありますか?

ありがとうございます!

+0

ccmallocをチェックしてください!とにかく、 'valgrind'を試して、メモリリークがあるかどうかを調べることができます。 – Khaled

+0

はい私はそれをどこに置くべきか本当にわからなかった。私はvalgrindを見ます、ありがとう! – Bobface

答えて

5

Valgrindをチェックしてください。これはUbuntuリポジトリにある必要があります。 C++プログラムのメモリ使用量に関する詳細な情報を得ることができます。メモリ使用のためのデバッガのようなもの。

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

また、この質問が投与よりもプログラミングに複数の関連で、NJAMDLeakTracer

関連する問題