Аналіз продуктивності Лінукс за 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, що означає що ми бачитимемо статистику за останню секунду. Перший рядок виводу буде показувати статистику з моменту запуску ОС і скоріше за все нам це не дуже цікаво, тому ми опустимо його.
Рядки які варто перевірити:
r
- кількість процесів які чекають на центральний процесор. Цей рядок показує набагато краще показує на скільки процесор завантажений, оскільки не включає ввід/вивід. Якщо значенняr
більше ніж кількість процесорів значить процесор(и) перевантажений(ні).free
- вільна пам'ять в КБ.si,so
- Swap-in і Swap-out - якщо не нульові значення, значить пам'ять закінчилася і використовується swap пам'ять.us,sy,id,wa,st
- Це розбиті колонки на що центральний процесор потратив час,man 8 vmstat
розкаже більше про них.