Пустой файл дампа ядра после ошибки сегментации

Я запускаю программу, и она прервана из-за ошибки сегментации. Проблема в том, что файл дампа ядра создается, но имеет нулевой размер.

Вы слышали о таком случае и как его разрешить?

У меня на диске достаточно места. Я уже выполнил ulimit -c unlimited, чтобы снять ограничение на размер основного файла - как запускать его, так и помещать поверх отправленного командного файла - но все еще имею 0-байтовые файлы дампа ядра. Права доступа к папке, содержащей эти файлы, равны uog + rw, а права доступа к созданным файлам ядра - только u + rw.

Программа написана на C ++ и отправлена ​​в кластере Linux с помощью команды qsub Grid Engine, я не знаю, имеет ли эта информация отношение к этому вопросу.


person Ali    schedule 15.11.2012    source источник
comment
Я полагаю, у вас есть свободное место на диске?   -  person Mark Loeser    schedule 15.11.2012
comment
Какие права на запись в файл нулевой длины?   -  person eh9    schedule 18.11.2012
comment
Следующие вопросы: Каковы права доступа к содержащему каталогу? Выполняется ли процесс под эффективным идентификатором пользователя, отличным от идентификатора владельца каталога?   -  person eh9    schedule 19.11.2012
comment
Вы сказали, что используете Grid Engine. Верно ли, что в кластере несколько узлов? Для нескольких узлов легко использовать одну файловую систему, но если они также не разделяют систему учетных записей пользователей, вероятно, что задание, запущенное на другом узле, не может выполнить задание под вашим собственным идентификатором пользователя и, таким образом, обращается к файловой системе как другой идентификатор.   -  person eh9    schedule 19.11.2012
comment
Попробуйте создать временный каталог и установить для него доступ для записи всем.   -  person eh9    schedule 19.11.2012
comment
У меня нет идей. Кроме того, я бы рекомендовал добавить часть этой информации к вопросу, чтобы мы могли очистить эти комментарии.   -  person eh9    schedule 20.11.2012
comment
Вы пробовали установить размер файла на qsub? (например, -l файл = 100 МБ)   -  person nvlass    schedule 25.11.2012
comment
@nvlass Он говорит: Невозможно запустить задание: неизвестный файл ресурсов.   -  person Ali    schedule 28.11.2012
comment
@Ali my bad, я ошибочно предположил, что Linux вроде qsub. Однако должен быть какой-то связанный ресурс, например максимальный размер файла на задание или, возможно, максимальный размер ядра на задание. Есть ли справочная страница в ресурсах по вакансиям?   -  person nvlass    schedule 28.11.2012


Ответы (4)


Установка ulimit -c unlimited включила генерацию дампов. по умолчанию дампы ядра создавались в текущем каталоге, который находился на nfs. установка /proc/sys/kernel/core_pattern на /tmp/core помогла мне решить проблему пустых дампов.

комментарий Ранжита Рубана помог мне разработать этот обходной путь.

Какую файловую систему вы используете для выгрузки ядра?

person Yuriy Pozniak    schedule 10.03.2015
comment
У меня только что возникла эта проблема с образом Linux VirtualBox с файловой системой vboxsf, которая сопоставлена ​​с диском NTFS (диск хост-машины). - person Mike Tunnicliffe; 01.06.2015
comment
изменение core_pattern от имени пользователя root творит чудеса! Путь к диску NFS сделал файлы ядра нулевыми. stackoverflow.com/a/12760552/999943 Помимо установки пути, по которому он создается, существует отличный синтаксис для изменения способа файл ядра тоже получает имя. linuxhowtos.org/Tips%20and%20Tricks/coredump.htm - person phyatt; 16.12.2016
comment
Была такая же проблема с смонтированной файловой системой под VirtualBox. Спасибо! - person Daniel; 13.02.2019

Похоже, вы используете пакетный планировщик для запуска исполняемого файла. Может быть, оболочка, которую Torque / PBS использует для создания вашей работы, наследует другое значение ulimit? Может быть, конфигурация планировщика по умолчанию не предназначена для сохранения дампов ядра?

Можете ли вы вместо этого запустить свою программу прямо из командной строки?

Или, если вы добавите ulimit -c unlimited и / или ulimit -s unlimited в начало вашего пакетного скрипта PBS перед вызовом исполняемого файла, вы сможете переопределить поведение ulimit PBS по умолчанию. Или добавление ulimit -c в любом случае может сообщить, какой лимит.

person Randy    schedule 16.11.2012
comment
Я поместил и ulimit -c unlimited, и ulimit -s unlimited в пакетный скрипт PBS, но дампы ядра по-прежнему пусты! - person Ali; 16.11.2012
comment
Какую файловую систему вы используете для выгрузки ядра? - person Ranjith Ruban; 22.11.2012

Если вы запускаете файл ядра на смонтированном диске, файл ядра не может быть записан на смонтированный диск, но должен быть записан на локальный диск.

Вы можете скопировать файл на локальный диск.

person gglinux    schedule 02.05.2017

Вы можете установить ограничения ресурсов, например, требуемую физическую память, с помощью параметра qsub, например -l h_vmem=6G, чтобы зарезервировать 6 ГБ физической памяти.

Для файловых блоков вы также можете установить h_fsize на соответствующее значение.

См. Раздел ОГРАНИЧЕНИЯ РЕСУРСОВ на странице руководства qconf:

http://gridscheduler.sourceforge.net/htmlman/htmlman5/queue_conf.html

s_cpu     The per-process CPU time limit in seconds.

s_core    The per-process maximum core file size in bytes.

s_data    The per-process maximum memory limit in bytes.

s_vmem    The same as s_data (if both are set the minimum is
           used).
h_cpu     The per-job CPU time limit in seconds.

h_data    The per-job maximum memory limit in bytes.

h_vmem    The same as h_data (if both are set the minimum is
           used).

h_fsize   The total number of disk blocks that this job  can
           create.

Кроме того, если кластер использует локальный TMPDIR для каждого узла и он заполняется, вы можете настроить TMPDIR на альтернативное расположение с большей емкостью, например Общий ресурс NFS:

export TEMPDIR=<some NFS mounted directory>

Затем запустите qsub с параметром -V, чтобы экспортировать текущую среду в задание.

Один из перечисленных выше вариантов или их сочетание может помочь вам решить вашу проблему.

person Vince    schedule 11.05.2015