Пустой файл дампа ядра после ошибки сегментации
Я запускаю программу, и она прерывается с ошибкой сегментации. Проблема в том, что файл дампа ядра создается, но имеет нулевой размер.
Слышали ли вы о таком случае и как его решить?
У меня достаточно места на диске. Я уже выполнил 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
Если вы запустите основной файл на смонтированном диске. Основной файл не может быть записан на подключенный диск, но должен быть записан на локальный диск.
Вы можете скопировать файл на локальный диск.