Як зрозуміти використання пам'яті та середнє завантаження на сервері Linux


57

Я використовую Linux-сервер, який має 128 ГБ пам'яті та 24 ядра. Я використовую верх, щоб побачити, як багато використовується. Його висновок вставляється в кінці посту. Ось два питання:

(1) Я бачу, що кожен із запущених процесів займає дуже малий відсоток пам'яті (% MEM не більше 0,2%, а більшість всього 0,0%), але як загальна пам'ять майже використовується, як у четвертому рядку виводу ( "Mem: 130766620k всього, 130161072k використано, 605548k безкоштовно, 919300k буфери")? Сума використаного відсотка пам’яті за всі процеси здається малоймовірною майже 100%, чи не так?

(2) як зрозуміти середнє навантаження на першому рядку ("середнє навантаження: 14.04, 14.02, 14.00")?

Дякую та з повагою!

Редагувати:

Дякую!

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

Чи вважається своп майже таким же, як пам'ять? Наприклад, коли пам’ять і своп майже однакового розміру, якщо пам'ять майже закінчується, але підкачка все ще значною мірою вільна, чи можу я просто переглядати це так, як ніби використаний відсоток пам'яті + своп все ще не високий, і запустіть інші нові процеси?

Як би ви розглядали спільне використання процесора чи пам'яті (або пам'яті + swap)? Чи хвилюєтесь ви, якщо будь-яка з них досягає занадто високої або обох?

Вихід зверху:

$ верх

 
вгору - 12:45:33 вгору 19 днів, 23:11, 18 користувачів, середнє завантаження: 14.04, 14.02, 14.00
Завдання: 484 всього, 12 біг, 472 сон, 0 зупинка, 0 зомбі
Cpu (s): 36,7% нас, 19,7% sy, 0,0% ni, 43,6% id, 0,0% wa, 0,0% привіт, 0,0% si, 0,0% st
Mem: 130766620k всього, 130161072k використано, 605548k безкоштовно, 919300k буфери
Заміна: всього 63111312k, використано 500556k, безкоштовно 62610756k, кешовано 124437752k

  PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND
 6529 sanchez 18 -2 1075m 219m 13m S 100 0,2 13760: 23 MATLAB
13210 тимофії 18 -2 48336 37м 1216 R 100 0,0 3: 56,75 абсурду
13888 Тимофій 18 -2 48336 37м 1204 R 100 0,0 2: 04,89 абсурд
14542 тимофій 18 -2 48336 37м 1196 R 100 0,0 1: 08,34 абсурд
14544 тимофії 18 -2 2888 2076 400 R 100 0,0 1: 06,14 збиратиДані
 6183 sanchez 18 -2 1133m 195m 13m S 100 0,2 13676: 04 MATLAB
 6795 sanchez 18 -2 1079m 210m 13m S 100 0,2 13734: 26 MATLAB
10178 Тимофій 18 -2 48336 37м 1204 R 100 0,0 11: 33,93 абсурд 
12438 Тимофій 18 -2 48336 37м 1216 R 100 0,0 5: 38,17 абсурд
13661 Тимофій 18 -2 48336 37м 1216 R 100 0,0 2: 44,13 абсурд
14098 Тимофій 18 -2 48336 37м 1204 R 100 0,0 1: 58,31 абсурд
14335 тимофії 18 -2 48336 37м 1196 R 100 0,0 1: 08,93 абсурд
14765 тимофії 18 -2 48336 37м 1196 R 99 0,0 0: 32,57 абсурд
13445 Тимофій 18 -2 48336 37м 1216 R 99 0,0 3: 01,37 абсурд
28990 корінь 20 0 0 0 0 S 2 0,0 65: 50,21 pdflush
12141 tim 18 -2 19380 1660 1024 R 1 0,0 0: 04,04 верх
 1240 корінь 15 -5 0 0 0 S 0 0.0 16: 07.11 kjournald
 9019 корінь 20 0 296м 4460 2616 S 0 0,0 82: 19,51 kdm_greet
    1 корінь 20 0 4028 728 592 S 0 0,0 0: 03,11 init
    2 корінь 15 -5 0 0 0 S 0 0,0 0: 00,00 ч. Ч
    3 коренева RT -5 0 0 0 S 0 0.0 0: 01.01 міграція / 0
    4 корінь 15 -5 0 0 0 S 0 0.0 0: 08.13 ksoftirqd / 0
    5 кореневий RT -5 0 0 0 S 0 0,0 0: 00,00 сторожовий / 0
    6 коренева RT -5 0 0 0 S 0 0,0 17: 27,31 міграція / 1
    7 корінь 15 -5 0 0 0 S 0 0,0 0: 01,21 ksoftirqd / 1
    8 кореневий RT -5 0 0 0 S 0 0,0 0: 00,00 сторожовий / 1
    9 корінь RT -5 0 0 0 S 0 0.0 10: 02.56 міграція / 2
   10 корінь 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 2
   11 корінь RT -5 0 0 0 S 0 0,0 0: 00,00 сторожовий / 2
   12 коренева RT -5 0 0 0 S 0 0,0 4: 29,53 міграція / 3
   13 корінь 15 -5 0 0 0 S 0 0,0 0: 00,34 ksoftirqd / 3

2
Дивіться це для гарної відповіді про пам’ять. serverfault.com/questions/38065/#38074
Zoredache

І ця відповідь для швидкого підсумку про середню завантаженість (або це давно прочитане для деталей).
Миколай

Відповіді:


56

(1) Я бачу, що кожен із запущених процесів займає дуже малий відсоток пам'яті (% MEM не більше 0,2%, а більшість всього 0,0%), але як загальна пам'ять майже використовується, як у четвертому рядку виводу ( "Mem: 130766620k всього, 130161072k використано, 605548k безкоштовно, 919300k буфери")? Сума використаного відсотка пам’яті за всі процеси здається малоймовірною майже 100%, чи не так?

Щоб побачити, скільки пам’яті ви зараз використовуєте, запустіть free -m. Це забезпечить вихід:

             загальна кількість використаних кешованих безкоштовних спільних буферів
Пам .: 2012 1923 88 0 91 515
- / + буфери / кеш: 1316 695
Зміна: 3153 256 2896

Значення «використано» у верхньому рядку майже завжди майже відповідає значенню пам’яті верхнього рядка (2012). Оскільки Linux любить використовувати будь-яку запасну пам'ять для кешування блоків дисків (515).

Ключова цифра, яку слід переглянути, - це використане значення буфера / кеш-рядка (1316). Ось скільки місця зараз використовують ваші програми. Для найкращої продуктивності ця кількість повинна бути меншою, ніж загальна пам'ять (2012 р.). Щоб уникнути помилок пам'яті, вона повинна бути меншою, ніж загальна пам'ять (2012) та обмінна площа (3153).

Якщо ви хочете швидко побачити, скільки пам'яті вільно, подивіться на вільне значення буферів / кеш-рядків (695). Це загальна пам'ять (2012) - фактично використана (1316). (2012 рік - 1316 = 696, а не 695, це буде просто питання округлення)

(2) як зрозуміти середнє навантаження на першому рядку ("середнє навантаження: 14.04, 14.02, 14.00")?

Ця стаття про середню завантаженість використовує приємну аналогію трафіку і є найкращою, яку я знайшов поки що: Розуміння завантаження процесора Linux - коли ви повинні турбуватися? . У вашому випадку, як зазначали люди:

У багатопроцесорній системі навантаження відносно кількості наявних процесорних ядер. Позначка "100% використання" становить 1,00 для одноядерної системи, 2,00, для двоядерної, 4,00 для чотирьохядерної тощо.

Отже, із середнім завантаженням 14,00 та 24 ядер, ваш сервер далеко не перевантажений.


17

Системи, подібні Unix, включаючи Linux, призначені для максимально ефективного використання наявної оперативної пам’яті. Загалом кажучи, є 3 стани, кожен МБ оперативної пам’яті може містити:

  1. Безкоштовно
  2. Використовується процесом
  3. Використовується для буферів

Третій стан використовується лише як нульовий простір і призначений для перерозподілу, коли це необхідно, тобто ваша загальна доступна пам'ять для програм дійсно безкоштовна + UsedforBuffers. Таким чином, ви дійсно не побачите виділений буфер простір, який відображається як призначений для будь-якого конкретного процесу.

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

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

Це означає, що ви можете вважати середнє навантаження як (# запущених процесів) + (# процесів, що очікують на IO). Маючи на увазі, що в будь-який момент ви можете виконати кількість процесів на $ CORE, я б сказав, що середнє значення вашої завантаженості 14 досить низьке.


Дякую! Який відсоток використовуваної пам'яті (або пам'яті + swap) вважається важким завантаженням і краще не запускати нові процеси? Ви дивитесь і на пам'ять, або на пам'ять + своп? Чи використаний своп у верхній частині розміру свопу фактично використовується? Щодо середнього завантаження процесора, чи вимірюєте ви фактичне навантаження "середнім навантаженням / числом ядра"? Скільки б ви вважали, що сервер сильно завантажений? Дякую та з повагою!
Тім

2
Навантаження - це лише показник. Як правило, навантаження, що перевищує ядра, є поганою справою. Взагалі високий відсоток використовуваної пам'яті - це погано. Ви не можете сказати, що "це дуже добре". Якщо у вас закінчилася оперативна пам’ять, вам не вистачить для запуску більшої кількості процесів. Якщо вас не закінчиться, у вас є багато. Це дуже залежить від специфіки вашої ситуації.
Cian

4

На sarчоловіковій сторінці:

       Середнє навантаження обчислюється як середня кількість прогону або 
       виконання завдань (стан R) та кількість завдань безперебійного користування
       сон (D стан) протягом зазначеного інтервалу.

На uptimeчоловіковій сторінці:

       Середнє навантаження системи - це середня кількість процесів, які є або
       у стані, що працює або працює безперебійно. Процес у стані запуску
       або використовує процесор, або чекає використання процесора. Процес у unin-
       переривчастий стан очікує деякого доступу вводу / виводу, наприклад, очікування диска.
       Середні значення приймаються протягом трьох часових інтервалів. Навантаження середніх
       не нормалізуються для кількості процесорів у системі, тому навантаження завантажується
       вік 1 означає, що одна система процесора завантажується весь час, перебуваючи на 4
       Система процесора - це означає, що він простояв 75% часу.

3
  1. Linux вже деякий час керує своєю пам'яттю таким чином, що робить цю лінійку в topосновному марною, як правило, зберігаючи більшу частину пам'яті машини, виділену для різних цілей використання, коли це не вимагає користувальницький процес.
  2. Середня завантаженість - це середня кількість процесів, які працюють або чекають на запуск. Зазвичай він має сильну негативну кореляцію із затримкою / чутливістю системи, тому ви хочете, щоб це було якомога нижчим. Оскільки кожен із ваших процесорів може запустити щось у будь-який момент часу, однак, вам здається, що це непогано працює у 14.

Дякую! Щодо 1, ви маєте на увазі, що деякі процеси не відображаються вгорі, але використовують багато пам’яті? Або що четвертий рядок виводу пам’яті («Mem: 130766620k всього, 130161072k використано, 605548k безкоштовно, 919300k буфери») вводить в оману, я повинен переглянути суму відсотків пам'яті, використану всіма процесами, показаними вгорі та в моєму випадку Я можу сміливо запускати якісь нові процеси, що вимагають пам'яті?
Тім

2
Як вказували інші відповіді, середню завантаженість слід порівнювати з кількістю процесорів, тому 14 не так багато в 24-ядерній системі. Це було б на зразок 14/24 = 0,58 для одноядерної системи (добре).
David Z

@Tim: Я маю на увазі останнє.
хаос

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