Как размер основного файла можно предсказать на основе, например,/Proc/PID/карты,/Proc/PID/coredump_filter, значения, показанные на вершине, как VIRT RES и так далее?
Верхняя граница представляет собой сумму всех отображений в /proc/$$/maps
. Однако обычно сопоставления только для чтения не сохраняются в core
(при условии, что вы будете иметь файлы, которые отображаются только для чтения, в то время, когда вы используете core
).
Нижняя граница представляет собой сумму всех записываемых сопоставлений в /proc/$$/maps
. Это нижняя граница, потому что ядро обычно также выгружает первую страницу исполняемых сопоставлений только для чтения, так как это то, где линкер BUILD_ID
примечание ELF. Эта заметка позволяет GDB находить правильную версию исполняемых или разделяемых библиотек, даже если система была обновлена новыми. core
также содержит дамп регистров для каждого потока. Также есть некоторые издержки для самого формата ELF.
VIRT и RES обычно не являются хорошей оценкой: VIRT «слишком велик» - он содержит отображения только для чтения, а также страницы, которые вносят в процесс, но на самом деле не были загружены. RES может быть слишком мал, если части вашей памяти были заменены.
Я немного запутался в том, что файл ядра может быть меньше, чем ВИРТ или сумма всех диапазонов памяти в/Proc/PID/карты, так что я подозреваю, что файл будет неполным.
Как я объяснялось выше, core
меньше, чем быть VIRT
и сумма всех диапазонов памяти в /proc/pid/maps
является нормальным и ожидалось.
Наконец, если вы действительно хотите найти точную оценку, прежде чем фактически сбросить ядро, вы можете изучить Google user-space coredumper.