Отражает ли размер файла core использование памяти при сбое приложения?

Мое приложение (C ++ на Sol 10 — 32 бит) упало, и размер ядра, сгенерированного приложением, составляет 4 ГБ. Могу ли я предположить, что приложение может использовать память до 4 ГБ (так же, как размер основного файла), когда оно собирается аварийно завершить работу? PS. Мое приложение автономно и не зависит от каких-либо других процессов.

Есть ли способ проверить общий объем памяти, используемый приложением, с файлом core?

4

Решение

Да, файл ядра представляет собой дамп всей области виртуальной памяти, используемой процессом в момент сбоя. Вы не можете иметь более 4 ГБ основного файла с 32-разрядными процессами.

В Solaris вы можете использовать несколько команд, расположенных в / usr / proc / bin, для получения информации из файла ядра, в частности:

  • file core: подтвердит, что файл core находится в вашем процессе
  • ядро pstack: скажет вам, где произошел сбой процесса
  • ядро pmap: покажет использование памяти на адрес

Помимо прочего, вы можете ограничить набор данных, сохраняемых в основном файле, с помощью команды coreadm. По умолчанию все сохраняется (стек + куча + шм + исм + дисм + текст + данные + родата + анон + шанон + ctf).

2

Другие решения

Из справочной страницы (http://linux.die.net/man/5/core):

Действие определенных сигналов по умолчанию — заставить процесс завершиться и создать файл дампа ядра, файл на диске, содержащий образ памяти процесса во время завершения.

Возможно, ваш код использует многопоточную среду и общие данные.

Также:

Начиная с ядра 2.6.23, специфичный для Linux файл / proc / PID / coredump_filter может использоваться для управления тем, какие сегменты памяти записываются в файл дампа ядра в случае, если дамп ядра выполняется для процесса с соответствующим идентификатором процесса.

Возможно, благодаря этому вы сможете узнать объем памяти, используемой приложением.

4

По вопросам рекламы [email protected]