Вопрос или проблема
Я выдаю следующие команды:
coredumpctl list
Пн 2019-11-18 23:58:19 GMT 19043 1000 1000 31 отсутствует /opt/google/chrome/chrome
Пн 2019-11-18 23:58:19 GMT 19062 1000 1000 31 отсутствует /opt/google/chrome/chrome
Вт 2019-11-19 15:52:55 GMT 22332 1000 1000 6 отсутствует /usr/bin/texstudio
Затем:
coredumpctl gdb 22332
Хранилище: /var/lib/systemd/coredump/core.texstudio.1000.bb1cfb6b67f2423fac681d721ee1ba02.22332.1574178774000000.lz4 (недоступно)
Файл "/var/lib/systemd/coredump/core.texstudio.1000.bb1cfb6b67f2423fac681d721ee1ba02.22332.1574178774000000.lz4" недоступен для чтения: Нет такого файла или директории
Это вызывает вывод трассировки стека и дает два вышеуказанных сообщения о том, что хранилище недоступно и файл не доступен для чтения или не найден.
Я делаю что-то не так?
Есть две общие причины, по которым вы можете ошибаться.
Часто дамп памяти “недоступен”, потому что программа была запущена под другим идентификатором пользователя, чем вы. Это означает, что у вас нет разрешения. Быстрое решение – запустить coredumpctl
от имени root, например, используя sudo coredumpctl
.
Я предполагаю, что это не ваша проблема. Эти дампы памяти принадлежат идентификатору пользователя 1000. Я предполагаю, что у вашего пользователя идентификатор 1000, потому что это первый (а, вероятно, и единственный) вход не root, созданный в вашей системе.
Во-вторых, systemd-coredump имеет некоторые настройки в coredump.conf, касающиеся того, сколько дискового пространства ему разрешено использовать. Похоже, если у вас свободно менее 15% дискового пространства, дампы памяти вообще не будут создаваться. (Если только вы не измените эту настройку).
Вы можете проверить доступное дисковое пространство, используя команду df -h
или df -h /var/lib/systemd/coredump/
.
(А чтобы увидеть общий абсолютный размер, занимаемый дампами памяти, вы можете выполнить du -sh /var/lib/systemd/coredump/
.)
MaxUse=, KeepFree=
Установить ограничения на дисковое пространство, занимаемое внешними хранимыми дампами памяти. MaxUse= гарантирует, что старые дампы памяти будут удалены, как только общее дисковое пространство, занимаемое дампами памяти, превысит этот лимит (по умолчанию 10% от общего размера диска). KeepFree= контролирует, сколько дискового пространства следует оставить свободным (по умолчанию 15% от общего размера диска). Обратите внимание, что дисковое пространство, занимаемое дампами памяти, может временно превышать эти лимиты во время обработки дампов памяти. Обратите внимание, что старые дампы памяти также удаляются по времени через systemd-tmpfiles(8). Установите любое значение в 0, чтобы отключить очистку по размеру.
Обратите внимание, что coredumpctl list
сообщает отсутствует
для каждого из дампов, а последнее сообщение об ошибке было Нет такого файла или директории
.
Я предполагаю, что ваше дистрибутивное ОС имеет регулярную задачу cron/таймер systemd, который очищает старые дампы памяти (раз в неделю, возможно?). Он очистил фактические файлы дампов памяти, и осталась только небольшая запись в журнале, которая сообщает coredumpctl
, что такой дамп когда-то существовал.
Ответ или решение
Когда вы сталкиваетесь с ошибкой coredumpctl
о том, что файл дампа (core dump) недоступен или не существует, есть несколько аспектов, которые стоит рассмотреть. Давайте подробнее разберем вашу ситуацию и возможные причины проблемы.
Описание ошибки
Вы выполнили команду coredumpctl list
, которая выводит список доступных дампов. В вашем выводе видно, что для всех дампов указано missing, что сигнализирует о том, что соответствующие файлы отсутствуют в системе.
Далее, при выполнении команды coredumpctl gdb 22332
, вы получаете сообщение о том, что файл с дампом недоступен:
Storage: /var/lib/systemd/coredump/core.texstudio.1000.bb1cfb6b67f2423fac681d721ee1ba02.22332.1574178774000000.lz4 (inaccessible)
File "/var/lib/systemd/coredump/core.texstudio.1000.bb1cfb6b67f2423fac681d721ee1ba02.22332.1574178774000000.lz4" is not readable: No such file or directory
Возможные причины
-
Недостаток прав доступа:
Как вы правильно отметили, если процессы создавались под другим идентификатором пользователя, у вас могут быть проблемы с доступом, но в вашем случае идентификатор пользователя совпадает (ID 1000). Попробуйте запустить команду с использованиемsudo
, чтобы исключить возможность проблем с правами. -
Настройки хранения дампов:
Проверьте конфигурационный файлcoredump.conf
, который обычно размещается в каталоге/etc/systemd/
. Параметры, такие какMaxUse
,KeepFree
и настройки хранения дампов, могут привести к тому, что система не будет сохранять дампы, если дисковое пространство ниже определенного порога. Убедитесь, что на диске достаточно свободного места. Проверьте это с помощью команды:df -h
или, для более узкой проверки:
df -h /var/lib/systemd/coredump/
Также стоит использовать:
du -sh /var/lib/systemd/coredump/
для определения размера, занимаемого дампами.
-
Автоматическая очистка дампов:
У большинства дистрибутивов Linux есть задачи, выполняющие очистку старых дампов через cron или systemd timer. Это может быть причиной, почему вы видите сообщения «missing». Если ваша система регулярно очищает старые дампы, возможно, созданные ранее файлы были удалены автоматически.
Рекомендации по решению проблемы
- Проверьте конфигурацию
coredump.conf
для настройки лимитов на использование диска. - Убедитесь, что у вас достаточно места на диске для хранения новых дампов.
- Если ваша система использует автоматическую очистку, возможно, имеет смысл изменить параметры или настроить задачи очистки так, чтобы сохранить дампы более длительное время.
- При необходимости можно вручную протестировать создание дампов, запустив приложение в отладочном режиме.
С учётом этих моментов, вы сможете диагностировать и решить проблему с отсутствующими дампами.