2015-09-07 45 views
5

Ubuntu Sunucusu (64-Bit) için C++ uygulamasında 7/24 çalışması gereken bir program kodladım. Sunucuda 2GB RAM var, ancak görünüşe göre programım çok fazla bellek ayırıyor. Bellek kullanımı: Program çok fazla bellek ayırıyor

Bu

sen benim kodu zaten% 17.8 bellek tüketir görme şekli yaklaşık 2 saat

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 

sonra top çıkışıdır. Bir noktada sunucu, bellek kalmamış olduğundan çökecektir.

Sorunum, programın bunu yapmaması gerektiği, ancak belleğin nereye ayrılacağını ve artık serbest kalmayacağını öğrenemem. Programın en fazla bellek ayırdığı yeri bulmak için belki de gdb'un içinde bir araç var mı?

Şimdiden teşekkürler!

+0

Bu soru yönetimine daha programlamaya daha fazla ilgilidir ccmalloc, NJAMD, check out! Her neyse, bir bellek sızıntısı olup olmadığını görmek için 'valgrind' deneyebilirsiniz. – Khaled

+0

Evet Gerçekten nereye koyacağımı bilmiyordum. Valgrind'e bir bakacağım, teşekkürler! – Bobface

cevap

5

Valgrind'a bakın, Ubuntu deposunda olmalıdır. C++ programlarında bellek kullanımı hakkında ayrıntılı bilgi verebilir. Bellek kullanımı için bir hata ayıklayıcı gibi.

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

Ayrıca LeakTracer