У меня есть процесс (который запускается сторожевой собакой каждый раз, по какой-то причине он останавливается), который обычно использует память около 200 МБ. Как только я увидел, что он ел память - с объемом памяти около 1,5-2 ГБ, что определенно означает "утечка памяти" где-то ( "утечка памяти" в кавычках, поскольку это не настоящая утечка памяти - как выделенная память, strong > и unreachable - обратите внимание, что используются только интеллектуальные указатели. Поэтому я думаю о каком-то огромном контейнере (я не нашел) или что-то вроде этого)
Позже процесс разбился, из-за высокой загрузки памяти и дампа ядра было создано около 2 ГБ. Но проблема в том, что я не могу воспроизвести проблему, поэтому valgrind
здесь не поможет (я думаю). Это происходит очень редко, и я не могу "поймать" его.
Итак, мой вопрос: есть ли способ, используя exe и основной файл, определить, какая часть процесса использовала большую часть памяти?
Я взглянул на основной файл с gdb
, там ничего необычного. Но ядро большое, так что должно быть что-то. Есть ли разумный способ понять, что произошло, или только угадывание может помочь (но для такого большого exe.., 12 потоков, около 50-100 (может быть больше) классов и т.д. И т.д.)
Это приложение C++
, работающее на RHEL5U3.