Load average і що з ним робити

Перше, що потрібно перевірити - це load average. Дивитися його можна командами uptime або w. Для оцінки завантаженості досить першого параметра - він повідомляє, скільки процесів перебуває в черзі до процесора. У першому наближенні, ця цифра повинна бути не більше кількості ядер процесора (тобто один процес на кожне ядро). Це не жорстке правило, але на нього варто звернути увагу.

Далі, ви можете отримати додаткову детальну інформацію командою top. Вона покаже список процесів, зайняту пам'ять та інше, а також статистику за завданнями процесів (3 рядок):

Тут детально розписано, на що процесор витрачає час. Що означає кожен пункт?

us - user - призначені для користувача процеси (з вихідним пріоритетом);

sy - system - системні (ядерні) процеси;

ni - nice - процеси зі зміненим пріоритетом;

id - idle - бездіяльність;

wa - I / O_wait - очікування введення-виведення;

hi - hardware interrupt - обробка апаратних переривань (повідомлення від миші, від інших пристроїв);

si - software interrupt - обробка програмних переривань (інтерфейси BIOS, системні виклики);

st - steal - для віртуальних машин, означає «час, вкрадене хостом у виртуалки».

nice - дослівно, «чемність» перед іншими процесами. Чим вона вища, тим більше чемно процес відноситься до інших, віддає їм більше часу, і тим нижче його пріоритет. Ще раз: вище nice - нижче пріоритет, і навпаки.

Можна залізти ще глибше, розбивши статистику по ядрах процесора натисканням клавіші «1».

Про що говорять високі показники (звичайно, крім id = idle)?

us + sy> 70: саме ці значення відображають реальну обчислювальну роботу процесора, так що якщо вони високі - потрібно міняти процесор на більш потужний.

wa> 30: дискова підсистема не справляється з навантаженням. Можливо кілька варіантів:

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

Далі потрібно вирішувати проблему за допомогою iotop / iostat.

st> 10 (на віртуальній машині): потрібно переходити на більш високий тарифний план хостера.

Можна збільшити швидкість оновлення таблиці top: натиснути d 1 [Enter] Shift-W.

У трохи більш красивому вигляді інформацію надає утиліта htop (sudo apt-get htop), а ще в ній можна міняти пріоритет (nice) процесів.

Важливе зауваження: іноді деякі процеси linux переходять в стан зомбі - вони завершили свою роботу, але не повідомили про це операційну систему. Тим самим вони залишилися в таблиці процесів, і займають місце. Їх неможливо вбити нічим крім як рестартом системи (несподівана річ для Лінукса, правда?). Їх кількість відображає утиліта top.

У моєму випадку, я дізнався що проблема в диску. Торрент-клієнти експлуатують диск в рваному режимі: вкрай непослідовна читання коротких шматків файлів. Але ж роздача йде на швидкості 3 МБайт / с, і мабуть це межа для диска в режимі випадкового читання.
Як рішення саме дискової проблеми, можна створити віртуальний диск в пам'яті, але в будь-якому випадку його обсягу не вистачить для торрентів.
Тому краще зробити так: зменшити пріоритет торрент-качалки до низьких значень, а пріоритет самби підняти. Правда, у мене є ще й торрент-качалка, що роздає з самба-директорії - але значить, не судилося.