2015-09-07 16 views
5

Mam kodowany program w C++ dla Ubuntu Server (64-bit), który powinien działać 24/7. Serwer ma 2 GB RAM, ale najwyraźniej mój program przypisuje zbyt dużo pamięci.Wykorzystanie pamięci: Program przydziela zbyt dużo pamięci

To wyjście top po około 2 godzinach

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 

Jak widać mój kod już zużywa 17,8% pamięci. W pewnym momencie nastąpi awaria serwera, ponieważ nie ma już pamięci.

Moim problemem jest to, że program nie powinien tego robić, ale nie mogę się dowiedzieć, gdzie pamięć zostanie przydzielona i już nie będzie wolna. Czy istnieje narzędzie, może nawet wewnątrz gdb, aby dowiedzieć się, gdzie program przydziela najwięcej pamięci?

Z góry dziękuję!

+0

To pytanie jest podobne do programowania niż podaniem! W każdym razie możesz spróbować "valgrind", aby sprawdzić, czy masz wyciek pamięci. – Khaled

+0

Tak, nie byłem pewien, gdzie to umieścić. Popatrzę na valgrind, dziękuję! – Bobface

Odpowiedz

5

Sprawdź Valgrind, powinien znajdować się w repozytorium Ubuntu. może dostarczyć szczegółowych informacji o wykorzystaniu pamięci w programach w C++. Trochę jak debugger do użycia pamięci.

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

Również sprawdzić ccmalloc, NJAMD, LeakTracer