2015-09-07 3 views
5

Я закодировал программу на C++ для Ubuntu Server (64-бит), которая должна работать 24/7. Сервер имеет 2 ГБ оперативной памяти, но, судя по всему, моя программа выделяет слишком много памяти.Использование памяти: программа выделяет слишком много памяти

Это выход 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, чтобы узнать, где программа выделяет большую часть памяти?

Заранее благодарен!

+0

Этот вопрос больше относится к программированию, чем к администрации! В любом случае, вы можете попробовать «valgrind», чтобы увидеть, есть ли у вас утечка памяти. – Khaled

+0

Да, я не был уверен, куда его поместить. Я посмотрю на valgrind, спасибо! – Bobface

ответ

5

Отъезд Valgrind, он должен быть в репозитории Ubuntu. он может предоставить вам подробную информацию об использовании памяти в программах на C++. Вид вроде отладчика для использования памяти.

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

Также проверьте ccmalloc, NJAMD, LeakTracer

Смежные вопросы