У меня есть экземпляр AWS EC2, на котором работает CentOS 7.7.1908 (systemd 219) с серверным приложением. Сервер записывает довольно много информации в системные журналы (используя syslog).
Недавно я включил постоянное хранение системных журналов, используя этот ответ. С тех пор, потребление памяти systemd-journald постоянно растет.
Через целый день systemd-journald
в конечном итоге использует более 250 МБ ОЗУ.
Я провел быстрый тест, чтобы подтвердить, что использование RAM journald действительно растет.
Тест :
systemd-journald
использование памятиlogger
systemd-journald
использование памятиjournalctl --flush
systemd-journald
службаsystemd-journald
использование памятиРезультаты :
# ps aux | grep journald | grep -v grep
root 23963 0.0 0.1 61320 2500 ? Ss 15:03 0:00 /usr/lib/systemd/systemd-journald
# for i in {0..7000}; do logger -t TEST -p err `python -c 'print "A"*1000'`; done;
# ps aux | grep journald | grep -v grep
root 23963 0.1 0.2 69512 11964 ? Ss 15:08 0:00 /usr/lib/systemd/systemd-journald
# journalctl --flush
# ps aux | grep journald | grep -v grep
root 23963 0.1 0.2 69512 11964 ? Ss 15:08 0:00 /usr/lib/systemd/systemd-journald
# systemctl restart systemd-journald
# ps aux | grep journald | grep -v grep
root 24237 0.0 0.1 55416 2492 ? Ss 15:08 0:00 /usr/lib/systemd/systemd-journald
Использование памяти увеличивается с 2,5 МБ до почти 12 МБ после регистрации примерно 7 МБ данных. Перезапуск демона возвращает использование памяти до ~ 2,5 МБ.
Моя интерпретация:
systemd-journald
использование памяти пропорционально объему обработанных данных.RuntimeMaxUse
не ограничивает это использование памяти.systemd-journald
очищает буфер, размер которого я не могу настроить.systemd-journald
может использовать.Мой journald.conf:
[Journal]
#Storage=auto # /var/log/journal is created and used, so this is equivalent to 'Persistent'
SyncIntervalSec=1m
RateLimitInterval=0
RateLimitBurst=0
SystemMaxUse=4G
RuntimeMaxUse=1M
Как решить эту "утечку", не перезагружая сервис каждый день?