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

Важливі нюанси:

  1. Це безпечно, якщо у тебе є достатньо вільної RAM (а у тебе є — 1.4 GB).

  2. Якщо RAM буде мало, swapoff може викликати нестачу пам’яті і навіть прибити якісь процеси (OOM-killer).

  3. Це лише "разова чистка". Якщо якась служба активно юзає 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