Как проанализировать использование памяти из дампа ядра?

У меня есть дамп ядра под Linux. Процесс пошел в буйство выделения памяти, и мне нужно найти хотя бы в какой библиотеке это происходит.

Какой инструмент вы предлагаете, чтобы получить общее представление о том, куда идет память? Я знаю, что проблема трудна/неразрешима полностью. Поможет любой инструмент, который может дать хоть какие-то подсказки.

[это процесс python, подозрение в том, что выделение памяти вызвано одним из пользовательских модулей, написанных на C]


person Andraž Tori    schedule 14.01.2011    source источник
comment
Я пробовал несколько разных инструментов: прямой gdb, gdb + libpython, gdbheap, пользовательский .gdbinit.   -  person Andraž Tori    schedule 24.01.2011
comment
Я думаю, что аналогичная проблема уже решена здесь: ошибка сегментации - дамп ядра в расширении Python C   -  person k500    schedule 12.01.2019


Ответы (2)


Проблема: нужно найти в какой библиотеке неисправна память.

Решение:

1) Используйте valgrind, чтобы узнать Invalid Write или Invalid Free of Memory

$ valgrind --tool=memcheck --error-limit=no --track-origins=yes (python your script) 

2) Используйте команду gdb mmap, чтобы узнать, в каком адресном пространстве находится библиотека.

$ gdb (your executable) -c (core)
$ vmmap 
person Tyson90    schedule 16.01.2019

Попробуйте запустить инструмент linux perf в процессе python с включенным графом вызовов. если его многопоточный процесс передает все связанные LWP в качестве аргументов.

person sunil    schedule 01.10.2017