Аналіз продуктивності Лінукс за 60 секунд

TL;DR

Список команд в порядку важливості

uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -msar -n DEV 1
sar -n TCP,ETCP 1
top

Пояснення окремих команд

1. uptime

$ uptime
 23:51:26 up 21:31,  1 user,  load average: 30.02, 26.43, 19.0

Виконуючи цю команду, легко побачити коли сервер був востаннє запущений або перезавантаженний та середні завантаженності(load averages), що показує те скільки процесів хочуть бути запущеними. На Лінукс системах, як правило останні три значення load average, показують скільки процесів хочуть запуститися та скільки процесів заблоковані неперериванним вводом/виводом(I/O), якщо цифри занадто великі(більше ніж кількість процесорів/ядер), це може свідчити про недостатність ресурсів або проблеми дискової підсистеми.

У прикладі наведенному вище вивід команди показує, що за останню хвилину запит на ресурси процесора є підвищенним, тобто за останню хвилину близько 30 процесів хотіли аби ОС їх запустила, порівнюючи це значення до 19 за останні 15 хвилин. Більше про це ви можете взнати почитавши офіційні man сторінки виконуючи команду man uptime. Скоріше за все для того аби точно упевнитись в цьому команди 3. та 4., що будуть наведені нижче допоможуть у цьому.

2. dmesg | tail

$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

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

Впевніться, що немає помилок, що можуть свідчити про проблеми продуктивності

У наведенному прикладі видно що ОС вбила процес по причині нестачі пам'яті(Out of memory) та скинула пакети TCP, що свідчить про те що точно щось пішло не так

Ніколи не пропускайте цей крок!

3. vmstat 1

$ vmstat 1
procs ---------memory------------  ---swap--   ---io---- --system-- ------cpu-----
 r  b swpd   free     buff  cache    si   so    bi    bo   in   cs  us sy id wa st
34  0    0 200889792  73708 591828    0    0     0     5    6   10  96  1  3  0  0
32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0
32  0    0 200890112  73708 591860    0    0     0     0 9501  2154 99  1  0  0  0
32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0
32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0
^C

Скорочення для Статистика Віртуальної пам'яті(Virtual Memory Statistics). Ця команда показує статистику що зв'язана з використанням пам'яті. Більше інфо в man 8 vmstat

vmstat був запущенним з аргументом 1, що означає що ми бачитимемо статистику за останню секунду. Перший рядок виводу буде показувати статистику з моменту запуску ОС і скоріше за все нам це не дуже цікаво, тому ми опустимо його.

Рядки які варто перевірити: