swapon / swapoff
скинути і знову увімкнути своп:
sudo swapoff -a
sudo swapon -a
скинути сторінковий кеш:
su -
sync; echo 1 > /proc/sys/vm/drop_caches
При такому стані на сервері:
kazka@mail:~$ free
total used free shared buff/cache available
Mem: 1969704 340812 115236 22048 1513656 1423280
Swap: 114964 114944 20
можуть допомогти очистити swap команди, які я використовую на десктопі?:
Так, ці дві команди на сервері спрацюють точно так само, як і на твоєму десктопі :)
Коли ти робиш:
sudo swapoff -a
— система вимикає підкачку і все, що було у swap, намагається повернути в RAM. А потім:
sudo swapon -a
— знову підключає всі swap-розділи/файли, які прописані у /etc/fstab
.
У твоєму випадку
RAM у тебе ~2 GB, зараз вільно ~1.4 GB.
Swap усього ~115 MB, і він майже повністю зайнятий.
Тобто пам’яті вистачає, щоб повернути весь вміст swap назад у RAM.
Отже, комбінація swapoff/swapon дійсно "очистить" swap, і після неї у виводі free
ти побачиш:
Swap: 114964 0 114964
Важливі нюанси:
Це безпечно, якщо у тебе є достатньо вільної RAM (а у тебе є — 1.4 GB).
Якщо RAM буде мало,
swapoff
може викликати нестачу пам’яті і навіть прибити якісь процеси (OOM-killer).Це лише "разова чистка". Якщо якась служба активно юзає swap, то через певний час він знову почне заповнюватися.
автоматичне очищення swap
Єкілька способів автоматизувати “чистку” swap, залежно від того, наскільки ти хочеш контролювати процес.
1. Через cron (найпростіше)
Можеш зробити періодичне скидання swap, наприклад раз на ніч. Відкриваєш crontab:
sudo crontab -e
і додаєш рядок (наприклад, щодня о 03:30):
30 3 * * * /sbin/swapoff -a && /sbin/swapon -a
2. Через systemd service + timer (сучасніше)
Створюєш сервіс /etc/systemd/system/clearswap.service
:
[Unit]
Description=Clear swap
[Service]
Type=oneshot
ExecStart=/sbin/swapoff -a
ExecStartPost=/sbin/swapon -a
Таймер /etc/systemd/system/clearswap.timer
:
[Unit]
Description=Run clearswap periodically
[Timer]
OnCalendar=03:30
Persistent=true
[Install]
WantedBy=timers.target
Далі:
sudo systemctl daemon-reload
sudo systemctl enable --now clearswap.timer
3. Зробити “розумну” чистку (лише коли swap реально використовується)
Можна написати невеликий скрипт, який перевіряє використання swap і чистить його тільки тоді, коли воно перевищує, скажімо, 50 MB:
#!/bin/bash
used=$(free | awk '/Swap/ {print $3}')
if [ "$used" -gt 51200 ]; then
/sbin/swapoff -a && /sbin/swapon -a
fi
Зберігаєш як /usr/local/bin/clearswap.sh
, робиш виконуваним:
chmod +x /usr/local/bin/clearswap.sh
і додаєш у cron, наприклад кожні 30 хвилин:
*/30 * * * * /usr/local/bin/clearswap.sh
Тобто можна зробити хоч регулярну чистку, хоч “розумну” за потреби.
Last updated