Статьи

Мониторинг на Unix с нуля

Linux и вообще многие Unix-подобные системы объединяют множество полезных инструментов командной строки для мониторинга ресурсов машины с целью повышения производительности с отслеживаемыми параметрами, такими как занятая память, загрузка ЦП или запросы диска.

Этот список команд, включающий флаги и пример выходных данных, должен выполняться, когда в системе есть какая-то нагрузка, чтобы выяснить, например, какие ресурсы ограничены (обычно ввод / вывод), а какие не являются узким местом. и не должен быть обновлен.

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

Вверх

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

Вы можете использовать флаг -d $ i, чтобы изменить интервал обновления, но, что более важно, -b, чтобы получить максимальные измерения на стандартном выходе (остановите его с помощью CTRL-C).

[11:03:58][giorgio@Desmond:~]$ top -b > top.log
^C[11:04:10][giorgio@Desmond:~]$ head top.log
top - 11:04:09 up  1:09,  3 users,  load average: 0.00, 0.08, 0.12
Tasks: 166 total,   1 running, 164 sleeping,   0 stopped,   1 zombie
Cpu(s):  6.8%us,  2.0%sy,  0.0%ni, 88.0%id,  3.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3344984k total,  2202872k used,  1142112k free,   451016k buffers
Swap:  3905532k total,        0k used,  3905532k free,   929932k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
  920 root      20   0 77108  19m 9348 S    2  0.6   2:16.51 Xorg               
 2515 giorgio   20   0  156m  16m  12m S    2  0.5   0:06.72 gnome-terminal     
 2933 giorgio   20   0  802m 291m  33m S    2  8.9   3:54.36 firefox-bin 

свободно

бесплатно отображает текущую статистику ОЗУ. Вы можете использовать ключ -m для отображения количества памяти в мегабайтах вместо 109553440-подобного количества байтов.

По умолчанию free запускается только один раз: флаг -s 5 (или любое другое значение) заставляет печатать информацию каждые 5 секунд.

Столбец used и free показывает количество используемой и свободной оперативной памяти в системе:

[11:05:29][giorgio@Desmond:~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          3266       2283        983          0        440        908
-/+ buffers/cache:        934       2332
Swap:         3813          0       3813

Строка — / + buffers / cache — это та, которую вы должны прочитать. Поскольку пустой Ram теряется, система сохраняет блоки, которые должны быть записаны на диск, в буферах, а также блоки, которые в противном случае должны были бы считываться с диска в кэш-памяти. Если есть необходимость, этот Ram может быть бесплатным, поэтому моя установка Ubuntu с Firefox и некоторыми другими открытыми приложениями занимает 934 Мегабайта Ram, а не 2283 .

сар

По умолчанию (и я использую его для этого) sar сообщает информацию о процессоре с интервалом, который вы можете выбрать:

[11:11:53][giorgio@Desmond:~]$ sar 1
Linux 2.6.38-8-generic (Desmond)    06/20/2011  _i686_  (2 CPU)

11:11:54 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:11:55 AM     all      6.03      0.00      1.51      0.00      0.00     92.46
11:11:56 AM     all      5.00      0.00      1.50      0.00      0.00     93.50
11:11:57 AM     all      0.50      0.00      1.00      4.98      0.00     93.53
11:11:58 AM     all      6.53      0.00      0.50      4.02      0.00     88.94

Сумма времени пользователя и системы для каждой строки представляет собой коэффициент использования (в процентах): чем выше это значение, тем хуже производительность. iowait — это удобный параметр, который сообщает нам процент времени, в течение которого процессор ожидает диск или другое устройство ввода / вывода: более высокий процент указывает на узкие места ввода / вывода.

IOSTAT

iostat похож на sar и входит в тот же набор инструментов. Но по умолчанию он сообщает также информацию ввода / вывода:

[11:13:25][giorgio@Desmond:~]$ iostat 4
Linux 2.6.38-8-generic (Desmond)    06/20/2011  _i686_  (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.40    0.02    1.90    2.80    0.00   88.88

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              26.40        85.54       112.00     402562     527112
sdb               6.45       155.31        21.64     730911     101824

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    0.50    0.50    0.00   98.50

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.00         0.00        16.00          0         64
sdb               1.00         0.00         8.00          0         32

Измерения процессора такие же, как у sar; но вы также получаете транзакции в секунду (и для каждого устройства) и считанные и записанные килобайты (в секунду и в выбранном интервале).

dstat

dstat — это универсальный инструмент комплексного мониторинга. Добавляя флаги, вы указываете параметр, который хотите отслеживать параллельно:

  • -c : процессор
  • -d : диск
  • -m : использование памяти
  • -n : сеть; размер данных, отправленных и полученных.
  • -g : виртуальная память: страницы в и из основной памяти.
  • -y : статистика системы, например количество переключений контекста.

 

[10:50:41][giorgio@Desmond:~]$ dstat -cdngy
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  8   2  87   4   0   0| 334k  133k|   0     0 |   0     0 | 454  1447
 17   8  75   0   0   0|   0     0 |   0     0 |   0     0 | 885  3445
 10   9  81   0   0   0|   0     0 | 169B  132B|   0     0 | 670  3341
 19   4  75   1   0   0|   0    56k|9683B 6501B|   0     0 | 705  2316 
[10:54:47][giorgio@Desmond:~]$ dstat -mt
------memory-usage----- ----system----
 used  buff  cach  free|     time     
 755M  438M  892M 1181M|20-06 10:54:49
 755M  438M  892M 1181M|20-06 10:54:50
 770M  438M  892M 1166M|20-06 10:54:51^C

Функция dstat удобна тем, что отображает различные метрики в произвольном формате вывода, который создается путем простого размещения их рядом это легко разобрать формат, и, ссылаясь на | и пробелы вы можете извлечь практически любое число очень быстро. Это также фиксированный вывод: всегда большое определенное количество символов.

Как вы можете видеть, где применяется размер в байтах, размеры отображаются как B | k | M.

И последнее: вывод этих программ почти всегда рассматривается для дальнейшей обработки, поэтому вы можете сохранить его в файлах журналов, передав его по конвейеру (как показано также сверху):

[11:19:27][giorgio@Desmond:~]$ free -m > free.log
[11:19:33][giorgio@Desmond:~]$ cat free.log
             total       used       free     shared    buffers     cached
Mem:          3266       2141       1125          0        443        899
-/+ buffers/cache:        797       2468
Swap:         3813          0       3813

Выводы

Помимо показа любой информации о вуайеристской системе с машины, на которой я пишу, я представил несколько инструментов для того же. Важно знать о существовании различных программ, поскольку только некоторые из них могут быть доступны в системе, в которой вы выполняете измерения (например, размещенный сервер или стандартная виртуальная машина).

Помните также, что, следуя традиции Unix, у каждой из этих команд есть man- страница, доступная с помощью man command_name (и выход из q ). Хорошее профилирование!