Що використовує мій своп (Ubuntu)?


30

У мене є сервер Ubuntu 8.04, на якому працює база даних та купа серверів додатків Java. Конфігурація та використання пам'яті:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

Я помітив, що своп йде вдень і випускається деякий час вночі. Попит не однаковий у всі дні, і починається в різний час. Так що це досить випадково, за винятком нечіткої межі "південь-ніч".

Навантаження на цю машину змінюється протягом дня. Він дуже низький між півночі та 6-7 ранку, значно вищий (але стабільний) до 6-8 вечора, потім поступово падає.

Тепер у мене є такі питання:

  1. Як я можу побачити, які процеси використовують swap?
  2. Чому він вважає за краще заміняти, а не брати пам'ять із кешу?

Відповіді:


25

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

Ви можете отримати уявлення про те, скільки пам’яті різних видів використовує кожен процес у topабо htop. Не показуйте використання swap за замовчуванням, але обидва можуть бути налаштовані на (верх: натисніть fта увімкніть SWAPстовпчик; htop: натисніть F2, додайте NSWAPстовпець). Ви можете отримати більше інформації про певний процес, cat /proc/12345/vmstatде 12345знаходиться ідентифікатор процесу. Зауважте, що "скільки використовується своп програми" не є повністю чітко визначеним, оскільки деякі сторінки поділяються кількома процесами.

Є два основні види конкурентів для оперативної пам’яті: оперативна пам’ять (яку можна замінити) та дискові кеші (які можна перечитати з файлу). Немає причин завжди надавати пріоритет пам’яті процесів над кеш-дисками: краще замінювати рідко використовувану частину процесорної пам’яті, ніж постійно і знову читати файл у пам’яті. Дані, які ви даєте, приблизно з половиною (скажімо, 30% -70%) пам'яті, присвяченої кеш-дискам, характерні для систем, які мають достатню кількість оперативної пам’яті для завдань, які вони повинні виконувати.


6
Я не можу знайти NSWAPстовпчик (Ubuntu 16.04: /).
jjmontes

1
@jjmontes Його видалено . Я не знаю чому.
Жил "ТАК - перестань бути злим"

У розділі FAQ на htop зазначено, що автор не вірить, що можливо точно повідомити про використання свопів, а показник верху є неточним.
Олівер Еванс

0

У StackOverflow вже є відмінна відповідь на ваше перше запитання ("Який процес насправді використовує своп?").

https://stackoverflow.com/a/7180078/1442301

Коротше кажучи, інструменти на кшталт topабо htopвзагалі не дають точної інформації про використання свопів. Вам слід зануритися в /procпапку (у файлі псевдо /proc/$PID/smaps), щоб отримати більш точну інформацію.

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


0

З htop v1.01, я натиснув «S» , щоб додати NSWAPстовпець замість «F2» (як це було запропоновано Gilles), потім Columns> Available Columns> і F5додати його.

введіть тут опис зображення


У мене htop 2.0.1, і я не бачу варіант NSWAP :(
Адам,

1
@Adam Maintener не хоче більше показувати цю колонку через відсутність надійного способу отримання цієї інформації; див. Чому htop не містить стовпчик SWAP, як верхній?
Генджо

0

Без опитування та аналізу результатів таких інструментів, як vmstat, freeі top, найкращим місцем для пошуку можуть бути кротописи кореневого користувача чи інших користувачів у системі. Якщо загальне навантаження на систему в певний час зростає надійно, є ймовірність, що в кроні відбувається процес, який створює потребу в ресурсах. В іншому випадку ви завжди можете створити утиліту для викидання гетто для викидання script, яка просто записує все, що йде до STDOUT.

Отже, якщо мені потрібно було виконати одноразовий сценарій викиду для отримання виводу для подальшої перевірки, в одному терміналі я б набрав:

script /tmp/free.txt

і потім

while (true); do date; free; sleep 30; done

і в іншому терміналі

script /tmp/top.txt

і потім

while (true); do date; top -n 1; sleep 30; done

а потім наступного ранку вбийте обидва scriptвиклики та співставте з результатами topтаfree

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

ви також можете прочитати посібник зі свопу ubuntu

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.