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

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

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

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

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

Ответ 1

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

Комментарий от Ranjith Ruban помог мне разобраться в этом обходном пути.

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

Ответ 2

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

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

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

Ответ 3

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

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

См. раздел "РЕСУРСНЫЕ ПРЕДЕЛЫ" в man-странице 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 для каждого node, и он заполняется, вы можете настроить TMPDIR на альтернативное местоположение с большей емкостью, например. Доля NFS:

export TEMPDIR=<some NFS mounted directory>

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

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

Ответ 4

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

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