Понадобилось раз в N минут записывать, сколько памяти занято и чем.
Создаем файл /usr/local/bin/memory-monitoring
(или другой) и в него записываем:
#!/bin/sh LC_ALL=C free -m ps -eo size,pid,user,command --sort -size | awk '{ ms=$1/1024 ; printf("%.1f Mb ",ms) } {print $0}' | head -n 10
Делаем его исполняемым:
chmod +x /usr/local/bin/memory-monitoring
Создаем сервис systemd, записав в файл /etc/systemd/system/memory-monitoring.service
:
[Unit] Description=Log memory usage [Service] StandardOutput=journal StandardError=journal Type=oneshot ExecStart=/usr/local/bin/memory-monitoring
Создаем таймер systemd для запуска того сервиса раз в 2 минуты, записав в файл /etc/systemd/system/memory-monitoring.timer
:
[Unit] Description=Log memory usage [Timer] OnUnitActiveSec=2minutes OnBootSec=5minutes [Install] WantedBy=timers.target
Включаем таймер:
sudo systemctl enable memory-monitoring.timer
Узнать, работает ли он, когда был в последний раз запущен:
sudo systemctl status memory-monitoring.timer
Первая команда
LC_ALL=C free -m
на английском языке выводит, сколько памяти и свопа в мебибайтах занято и свободно, LC_ALL=C задает английский язык для единообразия логов на разных системах для удобства их обработки.
Вторая команда выводит топ 10 процессов по потреблению памяти.
Потом эти записи видны в journalctl --unit=memory-monitoring
, в т.ч. с помощью journalctl --unit=memory-monitoring --boot=-N
можно отобразить журнал N загрузок системы назад.
Отправить ответ