Есть ли способ определить, какая часть процесса использовала больше всего памяти, только глядя на созданный файл ядра?

У меня есть процесс (который запускается сторожевым псом каждый раз, он останавливается по какой-то причине), который использует обычно около 200MB памяти. Однажды я увидел, что он пожирает память - с использованием памяти около 1.5-2GB, что определенно означает "утечку памяти" где-то ("утечка памяти" в кавычках, так как это не настоящая утечка памяти - как выделенная память, никогда не освобожденная и недоступная - пожалуйста, обратите внимание, что используются только умные указатели. Так что я думаю о каком-то огромном контейнере (я не нашел) или о чем-то подобном )

Позже процесс упал из-за высокого использования памяти и был создан дамп ядра - около 2GB. Но проблема в том, что я не могу воспроизвести проблему, поэтому valgrind здесь не поможет (я думаю). Это происходит очень редко, и я не могу "поймать" это.

Итак, мой вопрос - есть ли способ, используя exe и файл ядра, определить, какая часть процесса использовала больше всего памяти?

Я посмотрел на файл ядра с помощью gdb, там нет ничего необычного. Но ядро большое, значит, что-то должно быть. Есть ли хитрый способ понять, что произошло, или только догадки могут помочь (но для такого большого exe..., 12 потоков, около 50-100 (может больше) классов и т.д. и т.п. )

Это C++ приложение, работает на RHEL5U3.

15
задан Lightness Races with Monica 3 January 2012 в 15:58
поделиться