2015-09-07 26 views
5

Ho codificato un programma in C++ per Ubuntu Server (64 bit) che dovrebbe funzionare 24/7. Il server ha 2 GB di RAM, ma a quanto pare il mio programma sta allocando troppa memoria.Utilizzo memoria: il programma assegna troppa memoria

Questa è l'uscita di top dopo circa 2 ore

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 

Come è possibile vedere il mio codice consuma già il 17,8% di memoria. A un certo punto, il server si arresta in modo anomalo perché non è rimasta memoria.

Il mio problema è che il programma non dovrebbe farlo, ma non riesco a scoprire dove la memoria viene allocata e non più liberata. C'è uno strumento, forse anche all'interno di gdb, per scoprire dove il programma assegna più memoria?

Grazie in anticipo!

+0

Questa domanda è più legata alla programmazione rispetto alla somministrazione! Ad ogni modo, puoi provare 'valgrind' per vedere se hai una perdita di memoria. – Khaled

+0

Sì, non ero davvero sicuro di dove metterlo. Daro un'occhiata a Valgrind, grazie! – Bobface

risposta

5

Verificare Valgrind, dovrebbe essere nel repository di Ubuntu. può darti informazioni dettagliate sull'uso della memoria nei programmi C++. Un po 'come un debugger per l'utilizzo della memoria.

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

controllare anche ccmalloc, NJAMD, LeakTracer