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ę!
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
Tak, nie byłem pewien, gdzie to umieścić. Popatrzę na valgrind, dziękuję! – Bobface