4 команды для диагностики серверных проблем

Jun 16, 2016 12:43 · 958 words · 5 minute read hardware free iostat vmstat top

Для быстрого анализа производительности сервера и диагностики возникающих проблем можно использовать всего несколько удобных команд. Давайте разберемся!

Команда top выводит текущие процессы, которые обрабатываются ядром. Данные обновляются каждые пять секунд (по умолчанию), вывод примерно такой:

top - 10:27:44 up 16 days,  1:26,  4 users,  load average: 1.21, 1.02, 0.88
Tasks: 213 total,   1 running, 212 sleeping,   0 stopped,   0 zombie
%Cpu(s):  9.5 us,  1.0 sy,  0.0 ni, 88.9 id,  0.2 wa,  0.0 hi,  0.4 si,  0.0 st
KiB Mem:  12334660 total, 10879760 used,  1454900 free,   793424 buffers
KiB Swap:  3880956 total,   219888 used,  3661068 free.  5070564 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1516 mysql     20   0 4616124 2.348g   9068 S  22.6 20.0   4611:20 mysqld
 1083 www-data  20   0  547904 180172  31660 S   4.0  1.5   0:09.86 apache2
 1140 www-data  20   0  551436 183332  31884 S   2.0  1.5   0:09.19 apache2
 4616 www-data  20   0  550660 181832  31256 S   1.7  1.5   0:05.01 apache2
 9454 root      20   0  184564  36136   7692 S   1.3  0.3   0:00.10 searchd
12766 www-data  20   0  125344   9060   4996 S   1.3  0.1   8:36.07 nginx
 1324 root      20   0  500164  12396   4740 S   1.0  0.1 248:39.45 fail2ban-server
32218 www-data  20   0  726532 196140  42672 S   1.0  1.6   0:24.08 apache2
 1084 www-data  20   0  549856 181352  31916 S   0.7  1.5   0:08.77 apache2
 1085 www-data  20   0  554616 181784  31920 S   0.7  1.5   0:08.60 apache2
 1088 www-data  20   0  547216 181276  33632 S   0.7  1.5   0:09.98 apache2
 9473 root      20   0  175764  31384   7188 S   0.7  0.3   0:00.02 searchd
12767 www-data  20   0  125344   9148   4976 S   0.7  0.1   8:03.92 nginx
23003 www-data  20   0  551536 190008  44260 S   0.7  1.5   0:23.79 apache2
23707 www-data  20   0  559788 196408  43556 S   0.7  1.6   0:22.69 apache2
    3 root      20   0       0      0      0 S   0.3  0.0  82:19.68 ksoftirqd/0
    7 root      20   0       0      0      0 S   0.3  0.0  82:17.58 rcu_sched
   13 root      20   0       0      0      0 S   0.3  0.0  15:40.67 ksoftirqd/1
  136 root      20   0       0      0      0 S   0.3  0.0   1:00.08 jbd2/sda1-8
  576 root      20   0  102924   4796   4476 S   0.3  0.0  19:00.40 vmtoolsd
  712 root      20   0  106512   2860   2476 S   0.3  0.0  22:17.03 monit
  806 zabbix    20   0   89660   2944   2656 S   0.3  0.0  46:47.72 zabbix_agentd
  808 zabbix    20   0   89764   4172   4000 S   0.3  0.0  10:17.92 zabbix_agentd
  810 zabbix    20   0   89636   3920   3784 S   0.3  0.0   1:14.27 zabbix_agentd
 1082 www-data  20   0  550740 184372  33492 S   0.3  1.5   0:09.84 apache2
 1872 www-data  20   0  550280 183596  32744 S   0.3  1.5   0:08.15 apache2
 9419 root      20   0  175764  31628   7468 S   0.3  0.3   0:00.02 searchd
 9500 root      20   0  175764  29652   5488 S   0.3  0.2   0:00.13 searchd
 9515 root      20   0  172980  29220   7088 S   0.3  0.2   0:00.01 searchd
 9527 root      20   0   28400   3108   2540 R   0.3  0.0   0:00.04 top
23000 www-data  20   0  559928 194812  41844 S   0.3  1.6   0:21.81 apache2
25163 www-data  20   0  492344 193688  40772 S   0.3  1.6   0:20.45 

Выводится базовая информация о памяти, процессоре и процессах на сервере. Процессорное время делится на следующие типы:

  • us: — время, затраченное на обработку пользовательских задач;
  • sy: — время, затраченное на работу системы (ядра);
  • id: — время простоя (ожидания);
  • wa: — время, затраченное на ожидание ответа от дисковой подсистемы/сети;
  • hi: — время, затраченное на обработку прерываний (hardware);
  • si: — время, затраченное на обработку прерываний (software);
  • st: — время, использованное платформой виртуализации.

Подробнее узнать о команде top можно нажав кнопку “H”.

С помощью команды vmstat можно увидеть краткосрочный снимок процессора, памяти, процессов и операций ввода/вывода:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd    free   buff  cache    si   so    bi    bo   in   cs us sy id wa st
 3  1 220868 1325216 599956 5195496    0    0    51   111    6    3 10  2 88  0  0

Здесь видно следующие колонки:

  • r: — процессы, ожидающие выделения процессорного времени;
  • b: — процессы, ожидающие ответа диска/сети/пользователя;
  • swpd: — размер используемого свопа;
  • free: — размер свободной памяти;
  • buff: — буферы (страницы памяти, зарезервированные системой для выделения их процессам, когда они затребуют этого);
  • cache: — кэш (данные, которые недавно были использованы системой/процессами и хранящиеся в памяти на случай если вскоре они снова потребуются);
  • si: — количество блоков в секунду, которое система считывает из свопа в память;
  • so: — количество блоков в секунду, которое система перемещает из памяти в своп;
  • bi: — количество блоков в секунду, считанных с диска;
  • bo: — количество блоков в секунду, записанных на диск;
  • in: — прерывания;
  • bo: — переключения контекста;
  • us, sy, id, wa, st: — использование процессора, формат аналогичен формату команды top.

С помощью команды iostat можно получить отчет об использовании процессора, нагрузке на дисковую и сетевую подсистему. Результат запуска команды без дополнительных параметров выглядит следующим образом:

Linux 3.16.0-4-amd64 (example.com) 	06/09/2016 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.82    0.00    2.31    0.24    0.00   87.63

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sdb              21.68       199.62       252.49  280941560  355350416
sda               2.63         2.40       187.19    3371168  263445152
dm-0             20.74       159.65       207.13  224689725  291513556
dm-1              3.42         4.51        26.25    6350785   36943492
dm-2              6.48        35.45        19.11   49897297   26887944
dm-3              0.00         0.00         0.00        496          0
dm-4              0.00         0.00         0.00       2901       5424

Данной информации может показаться недостаточно, поэтому лучше использовать следующие ключи:

  • -d — отображать только использование дисков;
  • -c — отобразить только использование CPU;
  • -j — отобразить имя раздела (ID | LABEL | PATH | UUID);
  • -k — отобразить данные в килобайтах;
  • -m — отобразить данные в мегабайтах;
  • -p — отобразить статистику по указанному блочному устройству;
  • -t — отобразить время выполнения теста;
  • -x — отобразить расширенную статистику.

Информацию об использовании оперативной памяти и свопа можно увидеть с помощью команды free:

             total       used       free     shared    buffers     cached
Mem:      12334660   10892940    1441720     419980     609740    5108228
-/+ buffers/cache:    5174972    7159688
Swap:      3880956     220844    3660112

Вывод показывает общее количество свободной и используемой физической памяти, памяти отведенной для свопа и т.д.

tweet Share