Звільнення місця для заміни


10

Часом ядро, здається, має намір зберігати, наприклад, firefox у свопі, навіть якщо в ньому є достатня кількість фізичної пам'яті, і я використовую firefox:

robert@rm:~> free -m
             total       used       free     shared    buffers     cached
Mem:          3009       1904       1104          0        109        679
-/+ buffers/cache:       1116       1892
Swap:         4102        885       3216

Чи є команда, щоб доручити ядру скинути простір і використовувати доступну вільну пам'ять?


Оновлення : хоча за короткий термін я використовував swapon / swapoff, тепер я встановив

sudo sysctl vm.swappiness=30

як запропоновано в іншій відповіді, і ви отримаєте дуже хороші результати.

Відповіді:



15

Ви можете робити те, що пропонував nik, і використовувати swapoff . Однак є ще один, більш елегантний спосіб налаштувати "свобідність" або як агресивно ядро ​​заміняє програми на диск у системах, на яких працює ядра 2.6.

У списках розсилки Linux ядра були бурхливі дебати про політику, якою слід керуватись ядром щодо поведінки підміни . Підсумок полягає в тому, що тепер у нас є виправлення в 2.6 ядрах, що дозволяє нам в значній мірі налаштувати цю поведінку.

Зауважте, що для цього вам потрібні кореневі привілеї, як і для виконання команд swapoff / swapon.

Поточне значення "swappiness" можна перевірити у файлі / proc / sys / vm / swappiness або запустивши цю команду sysctl :

sudo sysctl vm.swappiness

Значення "swappiness" можуть коливатися від 0 (без заміни) до 100 (максимально поміняти на диск ). Ubuntu поставляється з типовою простотою, встановленою на 60.

Щоб змінити це для сеансу, зателефонуйте до sysctl ще раз та передайте йому значення простоти:

sudo sysctl vm.swappiness=30

Окрім безкоштовного , ви, звичайно, можете відстежувати наслідки цього за допомогою чудових утилітів htop або iotop .

Якщо вам подобається те , що ви бачите, і хочете , щоб зберегти це значення між перезавантаженнями, тільки місце «vm.swappiness = 30» в /etc/sysctl.conf файлі.

$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf 
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to 
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30

Ви можете грати з різними значеннями, поки не знайдете таке, що спричинить за собою прийнятний рівень заміни на вашій машині.


+1 для sysctl. Експериментуючи з різними значеннями swappiness, ви можете записати безпосередньо у файл файлу proc (ехо "30"> / proc / sys / vm / swappiness). Ці зміни є тимчасовими і не включатимуться в /etc/sysctl.conf. Після того, як ви задоволені налаштуваннями, використовуйте sysctl, щоб зробити "постійну" зміну.
Шон Чін

6

Пам’ятайте, що речі в свопі були розміщені там у більш зайнятий час, ніж зараз.

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

Це управляється на основі видалення під час запису, тому, якщо копія в ОЗУ буде оновлена, блоки в свопі будуть вивільнені.

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

Ви не бачите, скільки даних у цьому стані (як на сторінках дискових дисків у областях підкачки, так і в оперативній пам'яті) на виході з free. Ви можете бачити це через /procспеціальну файлову систему. Подивіться на результат cat /proc/meminfoдля SwapCachedпідрахунку.

Ще дві причини існування заміни у використанні, коли, мабуть, є запасна пам'ять

  • коли під великим завантаженням вводу / виводу ядро ​​вирішило, що сторінки, які не використовувались віками, краще заміняти, щоб воно могло використовувати оперативну пам’ять для кешу / буферів, хоча дивлячись на ваш freeвихід, що, мабуть, не так, як ви мати шматок дійсно нерозподіленої оперативної пам’яті, а також ту, яку використовують кеш / буфери IO.
  • сторінки чомусь були замінені раніше, і знов вони вже не потрібні - можливо, це пам'ять, якою користується процес, який був неактивним деякий час. У цьому випадку вивільнення замін (таким чином завантаження сторінок назад в оперативну пам’ять) може покращити час реакції цього процесу наступного разу, коли потрібно буде робити щось, крім сну, але якщо він був неактивним протягом певного часу, він може не знадобитися. в будь-який час найближчим часом все одно.

1
+1 за відмінне пояснення. FYI, vmstat дозволяє переглядати / proc / meminfo дані через не всі.

1

Пам'ятайте, що freeце лише знімок використання пам'яті. Результат, який ви бачите, може означати, що в певний момент минулого система не вистачала оперативної пам’яті, так що замінила матеріал, що залишився на RAM. З того часу оперативна пам'ять стала вільною, але не потрібен матеріал для свопінгу, тому він все ще тримається на свопі, а не просто захаращує оперативну пам’ять. Якщо це так, відключення swap було б поганою ідеєю. Чи є якісь процеси, які могли б вимагати такої великої кількості оперативної пам’яті після останнього перезавантаження?

Крім того, ви можете перевірити, що у вас немає обмеження щодо максимального розміру резидента, встановленого через ulimit (зазвичай в / etc / profile, але, можливо, він змінюється в залежності від дистрибутивів і його можна встановлювати за кожний процес (наприклад, у сценарії запуску) ).

Нарешті, у Microsoft Windows з'являються повідомлення про конкретні проблеми із тим, як Firefox замінюється на диск, наприклад, при мінімізації (наприклад, http://joeabiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113 ). Я не чув про це в системах GNU / Linux, але це, можливо, варто вивчити.


Дякую за відповідь. Моя проблема полягає не в тому, що використовується swap, а в тому, що він зараз використовується для активних програм, наприклад Firefox і Thunderbird, які відчувають себе мляво. Заміни / заміни змусили їх знову почуватися спритно.
Роберт Мунтяну
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.