Журнал занимает слишком много места
Постоянный журнал ограничен долей раздела, но доля эта велика, и на небольших дисках журнал занимает гигабайты. Пределы задаются настройками журнала, а не размером диска, поэтому «место закончилось» и «журнал не обрезается» — разные задачи.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Пределы не заданы и берутся по умолчанию
Без явных настроек journald занимает до десятой части раздела, но не более четырёх гигабайт. На малых дисках это ощутимо.
-
Одна служба заливает журнал
Служба в цикле перезапуска или с отладочным выводом порождает основной объём. Обрезка журнала не поможет, пока источник работает.
-
Обрезка не освобождает место
Активный файл журнала не удаляется. Кроме того, удалённые файлы могут оставаться занятыми открытыми описателями.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Текущий объём журнала.
journalctl --disk-usageКакие службы пишут больше всех.
journalctl -b --no-pager | awk '{print $5}' | sort | uniq -c | sort -rn | headИтоговые настройки журнала со всеми переопределениями.
systemd-analyze cat-config systemd/journald.confРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Без явных настроек journald занимает до десятой части раздела, но не более четырёх гигабайт. На малых дисках это ощутимо.
- Как проверить
-
Посмотрите текущий объём и действующие пределы.
journalctl --disk-usage systemd-analyze cat-config systemd/journald.conf | grep -iE "SystemMaxUse|MaxRetention"
- Как исправить
-
Задайте предел размера и срок хранения в настройках журнала, затем перезапустите службу журнала.
[Journal] SystemMaxUse=512M MaxRetentionSec=14day
- Почему происходит
- Служба в цикле перезапуска или с отладочным выводом порождает основной объём. Обрезка журнала не поможет, пока источник работает.
- Как проверить
-
Найдите самых говорливых.
journalctl -b --no-pager -o json 2>/dev/null | head -0; journalctl -b --no-pager | awk '{print $5}' | sort | uniq -c | sort -rn | head -10
- Как исправить
-
Уберите причину: остановите цикл перезапуска или снизьте уровень подробности вывода. Ограничение на службу задаётся параметром
LogLevelMax=.
- Почему происходит
- Активный файл журнала не удаляется. Кроме того, удалённые файлы могут оставаться занятыми открытыми описателями.
- Как проверить
-
Обрежьте журнал и сравните объём.
sudo journalctl --vacuum-size=200M && journalctl --disk-usage
- Как исправить
-
Если объём не изменился, перезапустите службу журнала: активный файл будет закрыт и обрезка пройдёт полностью.
sudo systemctl restart systemd-journald
Пример вывода
Журнал занял четыре гигабайта на диске в сорок. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ journalctl --disk-usage
Archived and active journals take up 3.9G in the file system.
$ df -h /var
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 40G 37G 1.1G 98% /
Связанные ошибки
- No space left on device в журнале службы Нет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
- Журнал пропадает после перезагрузки journalctl не показывает записи прошлых загрузок: журнал хранится только в памяти. Как включить постоянное хранение.
- Сообщения в журнале пропадают: сработало ограничение частоты Suppressed messages: journald отбрасывает записи болтливой службы. Как поднять предел точечно.
- File corrupted or uncleanly shut down, renaming and replacing Журнал повреждён после жёсткой перезагрузки: что означает сообщение и когда нужно вмешательство.
- Suppressed N messages from unit: часть записей потеряна journald отбросил часть записей из-за ограничения частоты. Как понять, что именно потеряно, и когда предел нужно поднять.
- Cannot allocate memory в журнале службы Не удалось выделить память: предел службы, память машины, настройка overcommit, исчерпанные области отображения.
- Disk quota exceeded для службы Место на разделе есть, а запись отклоняется: исчерпана дисковая квота пользователя или группы.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
Где встречается чаще всего
Источники
-
journald.conf(5)
Пределы размера и срока хранения журнала. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на машине с малым разделом и говорливой службой.