Як очистити своп, якщо є вільна оперативна пам’ять?


314

Коли я відкриваю додаток, що займає оперативну пам’ять (VirtualBox встановлений на 2 Гб оперативної пам’яті), зазвичай використовується деякий обмінний простір, залежно від того, що я ще відкрив.

Однак коли я закриваю останню програму, 2 Гб оперативної пам’яті звільняється, але залишається те саме використання місця підкачки.

Наприклад, зараз, приблизно через дві години після закриття VirtualBox, у мене є 1,6 ГБ оперативної пам’яті та ще 770 МБ в свопі.

Як я можу сказати Ubuntu припинити використання цього свопу та повернутися до використання оперативної пам’яті?


Найпростіше перезавантажити свій пристрій і заощадити час на спрацювання оперативної та безкоштовної оперативної системи та заощадити енергію температури ноутбука та процесора
Mohamed Slama

5
Велике припущення, що перенаселення всіх речей на комп’ютері займає менше часу, ніж це.
jQwierdy

Принаймні, Ubuntu 16.04 може продовжувати користуватися свопом довгий час після того, як він був необхідний, тим самим роблячи повільніші накази системи, покладаючись на файл swap, навіть якщо це вже не потрібно. Тому ручне втручання може бути корисним. Перезавантаження - це не завжди варіант.
мат

Відповіді:


167

Тільки тому, що виділяється своп, не означає, що його "використовують". У той час як такі програми, як системний монітор і вершина, показуватимуть, що виділяється частина вашого місця обміну (у вашому прикладі 770 МБ), що не означає, що система активно заміняється / вимикається.

Щоб дізнатися, чи щось заміняється / вимикається, ви можете скористатися vmstatкомандою. Залиште його кілька хвилин, щоб осісти і спостерігати за siстовпцями (swapin) та so(swapout). Якщо нічого не відбувається, то причин для занепокоєння немає.

Ось результат роботи vmstat 1, де ви бачите, що моя машина взагалі не змінюється.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

І все ж тут у topвас видно, що у мене виділено місце для заміни: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached

32
"Немає причин для занепокоєння", до того моменту, коли я продовжую використовувати якесь додаток, яке було замінено. тоді все пекло розривається.
törzsmókus

207
Ця публікація не відповідає на запитання.
emchristiansen

18
Передумова питання ґрунтується на помилках. Ця публікація стосується помилок.
popey

30
Я не бачу помилкового уявлення, я бачу незгоду щодо того, що означає "використаний". Ви маєте на увазі "використовується", щоб посилатися на активну заміну / вихід, тоді як початковий запитання видається "використаним", що означає, що є дані, які були замінені, які згодом можуть бути замінені назад. Є поважні причини, щоб хотіти спустити своп після події, яка заміняє багато іншої пам’яті, по суті випереджаючи активну заміну, про яку користувач знає, відбудеться пізніше (особливо, якщо пізніше «деапппомпа» може відбутися під час диск під навантаженням з інших причин).
drfrogsplat

39
Після запуску програми з інтенсивним запам'ятовуванням інші мої програми стають непривабливими, коли я переключаюсь на них, імовірно, через обміну. Якийсь спосіб сказати системі відміняти якомога більше даних (з подальшим перервою на каву) було б краще, ніж потрібно чекати 20-ти разів кожен раз, коли я Alt + Tab.
Марк K Cowan

423

Ядро Linux, яке лежить в основі Ubuntu, автоматично «замінить» ці сторінки з диска на оперативну пам’ять, якщо потрібно, так що в цілому я б сказав, нехай це відбувається природним чином.

Однак, якщо ви дійсно відчуваєте, що вам потрібно це змусити, (я бачу сценарій, коли ви хочете знати, що система піде на реагування пізніше), ви можете на мить відключити та повторно включити своп

sudo swapoff -a
sudo swapon -a

АБО альтернативно, як єдиний рядок

swapoff -a; swapon -a

Будьте обережні, роблячи це, оскільки ви можете зробити вашу систему нестабільною, особливо якщо її вже низька оперативна пам'ять.


8
Це зробило трюк, своп був скопійований у таран. Я думаю, вам просто потрібно переконатися в тому, щоб мати хоча б кількість свопів, що використовуються як безкоштовні оперативні пам’ятки, перш ніж запускати swapoff, правда?
jfoucher

12
Зміна не була скопійована в оперативну пам'ять. Це було просто інвалідом. Ви повинні переконатися, що вікно не замінюється перед цим. Якщо ви зробите це, то ядро ​​побачить, що пам'ять зникає, і OOM-Killer, ймовірно, почне вибивати програми довільно. Немає ніяких причин вам не потрібно «очищати» своп таким чином. (див. мій інший коментар) :)
popey

51
Насправді, своп, в основному, копіюється в рамковий режим, або, точніше, сторінки завантажуються назад з диска в оперативну пам'ять, перш ніж можна буде відключити заміну.
СпамапС

14
Сторінки копіюються в оперативну пам’ять лише в тому випадку, якщо вони все ще потрібні певному процесу. Іноді розміщена сторінка належить до вже закінченого процесу, і ядро ​​не має бажання негайно видалити ці сторінки зі свопу.
BrunoJCM

6
Це має бути правильною відповіддю, оскільки це спосіб повернути замінені сторінки до оперативної пам’яті та потім виповнити пам’ять своп
Альфонсо Хіменес

144

Ви також можете встановити значення "swappiness" за замовчуванням 60, таким чином підкачка не зросте настільки великою для початку. Чому режим доставки за замовчуванням встановлений на 60, коли рекомендоване значення 10 мене викликає здивування. З Ubuntu SwapFAQ :

За замовчуванням в Ubuntu - заміщення = 60. Зниження значення замовчування за замовчуванням, ймовірно, покращить загальну продуктивність для типової установки на робочому столі Ubuntu. Значення заміщення = 10 рекомендується , але сміливо експериментуйте.

Змінивши це значення на 10 або навіть 0, ви можете додати значне і помітне збільшення швидкості до старій системі з повільним приводом. Якщо встановити це значення у 0, не вимикається своп для ядра Linux 3.4 і нижче, але з 3.5+ він робить це, ви хочете використовувати значення 1, якщо ви хочете зберегти його на найнижчому рівні *.

Я не бачу причин не встановлювати це значення 0, оскільки все, що потрапляє на диск, повільніше, ніж оперативна пам'ять. У мене 8 віртуальних ядер, швидкий SSD і 8 ГБ пам’яті, а міняється своєю умовою 0. На цей момент у мене працює 3 віртуальні машини, об'єм пам'яті - 7,1 7,7 ГБ, мій обмін використовується лише 576 КБ 952 Мб і всі системи працюють безперебійно!

З Ubuntu SwapFAQ :

Параметр swappiness контролює схильність ядра до переміщення процесів з фізичної пам'яті та на диск обміну. Оскільки диски набагато повільніше, ніж оперативна пам'ять, це може призвести до уповільнення часу реакції для системи та додатків, якщо процеси надто агресивно переміщуються з пам'яті.

  1. свопіння може мати значення від 0 до 100
  2. swappiness = 0 вказує на ядро, щоб якомога довше уникати процесів заміни з фізичної пам'яті
  3. swappiness = 100 спонукає ядро ​​агресивно змінювати процеси з фізичної пам’яті і переміщувати їх в кеш-пам'ять

Нижче наведено основні вказівки щодо перевірки свопп, випорожнення свого свопу та зміни заміни на 0:

Щоб перевірити значення заміщення:

cat /proc/sys/vm/swappiness

Щоб тимчасово встановити swap на 0 ( як це запропонував SpamapS ):

Це спустошить ваш своп і перенесе весь своп назад в пам'ять. Спочатку переконайтеся, що у вас є достатня кількість пам’яті, переглянувши вкладку ресурсів gnome-system-monitor, ваша вільна пам'ять повинна бути більшою, ніж використаний своп. Цей процес може зайняти деякий час, використовувати gnome-system-monitor для моніторингу та перевірки прогресу.

sudo swapoff --all

Щоб встановити нове значення на 0:

sudo sysctl vm.swappiness=0 

Щоб увімкнути своп:

sudo swapon --all

Щоб назавжди встановити свопчість на 0:

  1. sudoedit /etc/sysctl.conf
  2. Додайте цей рядок vm.swappiness = 0
  3. sudo shutdown -r now # перезапуск системи

* В режимі ядра версії 3.5+ встановлення zamppiness на 0 повністю вимикає його, а налаштування 1 рекомендується, якщо ви бажаєте найменшого алгоритму заміщення. джерело: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/


1
Я щойно оновив відповідь, щоб включити постійний спосіб встановити свобідність. Не впевнений, наскільки це отримало таку популярність, я здогадуюсь, ніхто цього не перевіряв.
Ілля Лінн

1
Більше хорошого читання про простоту в цій відповіді => askubuntu.com/a/103916/11929
Ілля Лінн

3
Я не впевнений, чи було це доступно, коли автор спочатку опублікував відповідь, але для встановлення сервера ubuntu встановлено значення примхливості "60", оскільки це середовище має інший набір специфікацій для продуктивності. help.ubuntu.com/community / ...
Frito

1
Цей параметр дуже ефективний для контролю розміру свопу. Моя система має 16G оперативної пам’яті та 16G свопом. Іноді я біжу до віртуальних машин, і деякі мої програми заміняються. Коли я закриваю VM, використання оперативної пам’яті зменшується, але використання свопу залишається таким же, і моя система відстає при зміні програм. Зміна заміни покращила продуктивність для мене.
капад

1
Це має бути дійсно прийнятою відповіддю. Ретельне пояснення проблеми та її рішення, а також посилання та рішення для збереження пам’яті Swap, але допомагають тримати її під контролем в першу чергу. Дивовижні речі. Дякую. :)
Jack_Hu

53

Я виявив, що спорожнення swap може багато допомогти в системах з повільними дисками і обмеженою оперативною пам’яттю. Звичайно, як уже було сказано, спосіб це зробити - це бігти sudo swapoff -a; sudo swapon -a. Проблема тут полягає в тому, що якщо недостатньо оперативної пам’яті, це спричинить всілякі проблеми.

Я написав сценарій, який я називаю toggle_swap, який працював на мене останні кілька років. Він перевіряє достатню кількість вільної оперативної пам’яті, перш ніж фактично відключити своп. Ось:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

Дивовижно я шукав щось подібне. Можливо, щоб бути трохи безпечніше, ви можете представити кількість і відсотки, а потім запитати, щоб бути абсолютно впевненим.
Афійон

2
Я оновив код і створив gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c
Jekis

До такого висновку я дійшов, прочитавши всі підказки, начебто слід якось переконатися, що дійсно достатньо оперативної пам’яті, перш ніж вбивати своп. Дякую, сер, чудовий сценарій. Повинен бути включений до Ubuntu за замовчуванням (не жартую, це справді обов’язково.)
Shiki

За винятком того, що якщо ви запускаєте будь-яку нову річ під час вимкнення swap, і до того, як вона знову увімкнеться, у неї не буде достатньо пам'яті.
barteks2x

Це залежить від того, скільки вільної пам'яті у вас є. Якщо достатньо вільної пам’яті, щоб утримувати все в свопі І новому процесі, то проблем не виникає. Якщо ні, то ви праві.
Скотт Северанс

25

Провівши пару днів за своєю обробкою , я прийшов до висновку, що ядро ​​потрібно залишити власним пристроям. Він знає, що робить, і оптимізований, щоб дати вам найкращий досвід.

Якщо у вас є справді вагомі причини, що потрібно повернути цей диск назад, я б залишив його.


2
У мене були деякі речі в свопі, vmstat показав мені, що swapin і swapout відбуваються, а Chrome був відсталим, а мій процесор ледь використовувався. Достатньо вагомих причин, ні?
Ксерус

Однозначно є випадки, коли певна заміна на робочому столі робить її млявою. (не під час його заміни, а також після, коли достатньо оперативної пам’яті, тривалий час після.) Отже, у кращому випадку ця відповідь є лише суб’єктивним досвідом, який трапляється в деяких випадках.
Cray

-1

Це не впливає на продуктивність, якщо ваш замінний простір зайнятий. Єдиний штрафний показник - це те, що відбувається введення / вихід зі свопу. Якщо нічого не замінюють / заміняють, то вам нічого не потрібно турбуватися.


10
Так , але якщо що - то буде бути обмінені це дійсно впливає на продуктивність, отже , це питання.
Квант

Це справжня нісенітниця, як правило, великі резервні заміни є на жорстких дисках або взагалі на повільнішому пристрої, ніж оперативна пам’ять - якщо місця не вистачає - наявні речі замінюються - наприклад, Інтернет-браузер - і ви практично використовуєте його з повільніше пристрою. ..
jave.web
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.