Утилиты для анализа серверной нагрузки

Jul 28, 2016 15:07 · 985 words · 5 minute read hardware

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

Анализировать необходимо 4 основных «кита» — процессор, память, дисковую и сетевую подсистему. Давайте разберемся!

Прежде всего следует обратить внимание на процессор. Чаще всего для этого используется утилита top:

top - 10:57:05 up 21 days,  1:55,  3 users,  load average: 0.95, 0.83, 0.87
Tasks: 212 total,   1 running, 211 sleeping,   0 stopped,   0 zombie
%Cpu(s): 14.9 us,  3.1 sy,  0.0 ni, 80.9 id,  0.1 wa,  0.0 hi,  1.1 si,  0.0 st
KiB Mem:  12334660 total,  9825568 used,  2509092 free,   737240 buffers
KiB Swap:  3880956 total,   221236 used,  3659720 free.  4285304 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1516 mysql     20   0 4616644 2.346g   8788 S  17.3 19.9   6069:34 mysqld
30502 www-data  20   0  125848   9572   4960 S   3.3  0.1   5:35.14 nginx
11934 www-data  20   0  551548 186760  39692 S   2.0  1.5   0:40.68 apache2
14066 www-data  20   0  549132 177820  28576 S   2.0  1.4   0:01.66 apache2
 1324 root      20   0  507240  13936   5388 S   1.7  0.1 323:58.69 fail2ban-server

Наиболее важными здесь являются следующие показатели:

  • us — время обработки пользовательских процессов;
  • id — время простоя (неиспользуемые ресурсы);
  • wa — время ожидания операций ввода/вывода.

Аналогичную информацию в удобочитаемом виде можно получить утилитой htop:

  1  [||||||||                                                                  8.8%]     Tasks: 128, 80 thr; 2 running
  2  [||||||||                                                                  9.0%]     Load average: 1.37 1.05 0.96
  3  [|||||||||||||||                                                          18.0%]     Uptime: 21 days, 02:07:35
  4  [||||||                                                                    6.2%]
  Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  4699/12045MB]
  Swp[|||||                                                               216/3789MB]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 1516 mysql      20   0 4508M 2402M  8788 S 33.9 19.9     101h /usr/sbin/mysqld
13146 mysql      20   0 4508M 2402M  8788 S 17.7 19.9  9:36.63 /usr/sbin/mysqld

Более подробную статистику использования процессора можно получить с помощью утилиты mpstat:

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

11:02:57 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:02:57 AM  all    9.77    0.00    1.85    0.24    0.00    0.48    0.00    0.00    0.00   87.66
11:02:57 AM    0    9.26    0.00    1.90    0.21    0.00    1.71    0.00    0.00    0.00   86.93
11:02:57 AM    1    9.60    0.00    1.84    0.25    0.00    0.10    0.00    0.00    0.00   88.20
11:02:57 AM    2   10.14    0.00    1.86    0.25    0.00    0.06    0.00    0.00    0.00   87.69
11:02:57 AM    3   10.09    0.00    1.81    0.26    0.00    0.06    0.00    0.00    0.00   87.79

Утилита выводит детальную информацию по всем процессорам (ядрам) на сервере.

Определить количество используемой и занятой оперативной памяти можно утилитой free, например так:

free -h
             total       used       free     shared    buffers     cached
Mem:           11G       9.4G       2.3G       403M       725M       4.1G
-/+ buffers/cache:       4.6G       7.2G
Swap:         3.7G       216M       3.5G

Для получения всей доступной информации об оперативной памяти используйте команду cat /proc/meminfo:

cat /proc/meminfo
MemTotal:       12334660 kB
MemFree:         2464328 kB
MemAvailable:    8056308 kB
Buffers:          742876 kB
Cached:          4327512 kB
SwapCached:       153412 kB
Active:          5711008 kB
Inactive:        2798280 kB
...
SwapTotal:       3880956 kB
SwapFree:        3659720 kB
...

Примечание. В нормальном случае использование свопа должно стремиться к нулю.

Анализ дисковой подсистемы обычно начинают с проверки используемого/свободного места на носителях с помощью df -h:

Filesystem                                  Size  Used Avail Use% Mounted on
/dev/sda1                                    16G  3.9G   12G  26% /
udev                                         10M     0   10M   0% /dev
tmpfs                                       2.4G  265M  2.1G  11% /run
tmpfs                                       5.9G  1.6M  5.9G   1% /dev/shm
tmpfs                                       5.0M     0  5.0M   0% /run/lock
tmpfs                                       5.9G     0  5.9G   0% /sys/fs/cgroup
/dev/mapper/vg0-www                          30G   23G  6.9G  77% /var/www
/dev/mapper/vg0-mysql                        15G   10G  4.7G  69% /var/lib/mysql
/dev/mapper/vg0-home                         15G   48M   15G   1% /home
/dev/mapper/vg0-log                         9.8G  3.2G  6.6G  33% /var/log

Утилита iotop выведет развернутую информацию о текущем использовании диска запущенными процессами:

Total DISK READ :       7.79 K/s | Total DISK WRITE :      23.38 K/s
Actual DISK READ:       7.79 K/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
27650 be/4 mysql       7.79 K/s    0.00 B/s  0.00 %  0.04 % mysqld --basedir=/usr --datadir=/var/lib/mysql/
14520 be/4 www-data    0.00 B/s    3.90 K/s  0.00 %  0.00 % apache2 -k start
 4716 be/4 www-data    0.00 B/s    3.90 K/s  0.00 %  0.00 % apache2 -d /etc/apache2 -k start
30501 be/4 www-data    0.00 B/s   11.69 K/s  0.00 %  0.00 % nginx: worker process
30502 be/4 www-data    0.00 B/s    3.90 K/s  0.00 %  0.00 % nginx: worker process

Тут интересными являются показатели Actual DISK READ (объем данных, читаемых с диска) и Actual DISK WRITE (объем данных, записываемых на диск). Эти значения могут отличаться от показателей Total DISK READ и Total DISK WRITE из-за использования дискового кеша и низкоуровневой оптимизации.

Оценить сетевой трафик в реальном времени поможет утилита cbm:

Interface                    Receive                    Transmit                    Total
eth0                         30.04 kB/s                 245.36 kB/s                 275.39 kB/s
eth1                         1.44 kB/s                  456.55 B/s                  1.90 kB/s
lo                           86.62 kB/s                 86.62 kB/s                  173.24 kB/s

Увидеть «все и сразу» позволяет утилита dstat:

dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
 10   2  88   0   0   0| 211k  435k|   0     0 | 187B  156B|1328  1718
 30   5  62   0   0   2|   0   100k|  99k 1041k|   0     0 |2628  2662
 49  12  37   0   0   2|   0    32k|  97k 1194k|   0     0 |2863  2947
 29   1  69   1   0   1|   0  6940k|  81k  410k|   0     0 |1897  2187
 24   2  73   0   0   1|   0   132k| 168k  338k|   0     0 |2104  2356
  6   2  92   0   0   1|  48k  156k|  90k  458k|   0     0 |2120  2673
 13   1  86   0   0   1|   0    88k|  72k  383k|   0     0 |1568  2001
 27   1  71   1   0   1|   0    56k|  54k  270k|   0     0 |1364  1279
 16   1  83   0   0   0|   0   176k|  68k  126k|   0     0 |1323  1600
  1   0  99   0   0   0|   0   144k|  34k  180k|   0     0 | 684   744
  6   1  93   0   0   1|   0    56k|  81k  303k|   0     0 |1495  1968

Общая статистика сервера — использование процессора (total-cpu-usage), использование дисковой (dsk/total) и сетевой (net/total) подсистемы выводится в реальном времени, данные обновляются ежесекундно.

Для автоматического отслеживания указанных параметров лучше использовать системы мониторинга, например New Relic и Prometheus.

tweet Share