У меня есть процесс (который запускается сторожевым псом каждый раз, он останавливается по какой-то причине), который использует обычно около 200MB памяти. Однажды я увидел, что он пожирает память - с использованием памяти около 1.5-2GB, что определенно означает "утечку памяти" где-то ("утечка памяти" в кавычках, так как это не настоящая утечка памяти - как выделенная память, никогда не освобожденная и недоступная - пожалуйста, обратите внимание, что используются только умные указатели. Так что я думаю о каком-то огромном контейнере (я не нашел) или о чем-то подобном )
Позже процесс упал из-за высокого использования памяти и был создан дамп ядра - около 2GB. Но проблема в том, что я не могу воспроизвести проблему, поэтому valgrind
здесь не поможет (я думаю). Это происходит очень редко, и я не могу "поймать" это.
Итак, мой вопрос - есть ли способ, используя exe и файл ядра, определить, какая часть процесса использовала больше всего памяти?
Я посмотрел на файл ядра с помощью gdb
, там нет ничего необычного. Но ядро большое, значит, что-то должно быть. Есть ли хитрый способ понять, что произошло, или только догадки могут помочь (но для такого большого exe..., 12 потоков, около 50-100 (может больше) классов и т.д. и т.п. )
Это C++
приложение, работает на RHEL5U3.