В данной статье будет рассмотрен список лучших инструментов для мониторинга производительности Linux машин. Большинство дистрибьюторов укомплектованы большим количеством таких инструментов. Вы можете использовать их для выявления возможных проблем с производительностью. Итак начнем наш обзор: |
|
#1: top - список системных процессов и информации о них
top — консольная команда, которая выводит список работающих в системе процессов и информации о них. По умолчанию она в реальном времени сортирует их по нагрузке на процессор (обновляя список каждые 5 секунд).
Полезные интерактивные команды при работе с top
[Пробел] Немедленно обновить содержимое экрана.
[h] Вывести справку о программе.
[t] Отобразить/скрыть общую информацию.
[m] Отобразить/скрыть информацию о памяти.
[k] Уничтожить процесс. Программа запрашивает у вас код процесса и сигнал, который будет ему послан.
[M] Сортировать по объёму используемой памяти.
[P] Сортировать по загрузке процессора.
[z] Цветное/монохромное отображение.
#2: vmstat – активность процессора и схем прерывания
Команда vmstat выдает некоторую статистику, хранимую системой в процессах, страницы по требованию и активность процессора и схем прерывания.
Пример вывода:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 1 130400 54304 34572 202100 0 0 31 4 39 18 3 3 89 5
1 0 130400 54056 34668 202288 0 0 56 117 195 133 3 1 94 2
1 0 130400 54056 34668 202328 0 0 13 0 199 127 3 0 97 0
1 0 130400 52940 34672 203416 0 0 364 0 198 135 3 0 94 3
1 0 130400 52832 34700 203436 0 0 8 141 214 127 3 1 96 1
0 0 130400 52584 34704 203668 0 0 79 0 201 124 3 0 96 1
0 0 130400 51840 34704 204484 0 0 269 0 181 139 4 1 95 0 |
#3: w – отображает пользователей, находящихся в системе и то, что они делают
Команда 'w' печатает суммарную информацию об активности системы, включая данные о том, что делает каждый пользователь.
Пример вывода:
19:22:41 up 4 days, 18:06, 1 user, load average: 0,07, 0,08, 0,08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/4 192.168.0.7 19:04 0.00s 0.33s 0.01s w |
#4: uptime – выдает текущий аптайм системы (время сколько она работает)
Утилита uptime показывает текущее время, время, которое проработала система, число пользователей в системе и среднюю загруженность системы за последние 1, 5, и 15 минут.
Пример вывода:
19:25:23 up 4 days, 18:09, 1 user, load average: 0.06, 0.07, 0.07 |
#5: ps - выдача информации о состоянии процессов
Команда ps выдает информацию об активных процессах. Для того чтобы отобразить все процессы – используем ключ –A или –e
Пример вывода:
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:01 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
7 ? 00:00:00 cpuset
8 ? 00:00:00 khelper
9 ? 00:00:00 netns
10 ? 00:00:00 async/mgr
11 ? 00:00:00 kintegrityd/0
12 ? 00:00:05 kblockd/0
13 ? 00:00:00 kacpid
14 ? 00:00:00 kacpi_notify
15 ? 00:00:00 kacpi_hotplug
16 ? 00:00:00 ata/0
17 ? 00:00:00 ata_aux
18 ? 00:00:00 ksuspend_usbd
19 ? 00:00:00 khubd
20 ? 00:00:00 kseriod
21 ? 00:00:00 kmmcd
22 ? 00:00:00 bluetooth
23 ? 00:00:00 khungtaskd
24 ? 00:00:02 pdflush
26 ? 00:01:56 kswapd0
….
…..
24829 ? 00:00:01 apache2
24830 ? 00:00:01 apache2
24831 ? 00:00:01 apache2
26377 ? 00:00:11 smbd
26601 ? 00:00:00 apache2
26611 ? 00:00:00 pickup
26756 ? 00:00:00 smbd
26770 ? 00:00:00 smbd
26798 ? 00:00:00 sshd
26869 pts/4 00:00:00 zsh
26904 pts/4 00:00:00 vmstat
26907 pts/4 00:00:00 vmstat
26946 pts/4 00:00:00 ps |
Командой ps обрабатываются следующие опции:
-e
Вывести информацию обо всех процессах.
-d
Вывести информацию обо всех процессах, кроме лидеров групп.
-a Вывести информацию обо всех наиболее часто запрашиваемых процессах, то есть обо всех процессах, кроме лидеров групп и процессов, не ассоциированных с терминалом.
-f
Генерировать полный листинг (см. ниже раз яснение смысла колонок).
-l
Генерировать листинг в длинном формате (см. ниже).
-n файл_с_системой Считать, что операционная система загружена из файла_с_системой, а не из файла /unix.
-t список_терминалов
Выдавать информацию только о процессах, ассоциированных с терминалами из заданного списка_терминалов. Терминал - это либо имя файла-устройства, например ttyномер или console, либо просто номер, если имя файла начинается с tty.
-p список_идентификаторов_процессов Выдавать информацию только об указанных процессах.
-u список_идентификаторов_пользователей Выдавать информацию только о процессах с заданными идентификаторами или входными именами пользователей. Идентификатор пользователя выводится в числовом виде, а при наличии опции -f - в символьном.
-g список_идентификаторов_лидеров_групп Выводить информацию только о процессах, для которых указаны идентификаторы лидеров групп. Лидер группы - это процесс, номер которого идентичен его идентификатору группы. Shell, запускаемый при входе в систему, является стандартным примером лидера группы.
#6: free – использование памяти
Команда free служит для отображения общего количества свободной и использованной физической и swap памяти.
Пример вывода:
total used free shared buffers cached
Mem: 508972 502972 6000 0 39620 244656
-/+ buffers/cache: 218696 290276
Swap: 1510068 130296 1379772 |
#7: iostat – средняя нагружка на ЦП, дисковая активность
Команда iostat выводит статистику по I/O устройствам
iostat -d – вывод статистики только для устройств (в основном жёсткие диски)
iostat -dx – вывод расширенной статистики для устройств
Пример вывода:
Linux 2.6.28-128.1.14.el5 06/26/2010
avg-cpu: %user %nice %system %iowait %steal %idle
3.60 0.09 0.51 0.03 0.00 95.86
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.04 31.88 512.03 16193351 260102868
sda1 0.00 0.00 0.00 2166 180
sda2 22.04 31.97 512.03 16189010 260102688
sda3 0.00 0.00 0.00 1615 0 |
#8: sar - информация о функционировании системы
Есть два способа использования команды sar. При первом способе sar опрашивает и накапливает счетчики активности операционной системы на заданном числе интервалов, каждый из которых длится заданное число секунд. По умолчанию число интервалов равно 1. Устанавливается этот режим по умолчанию, управляет им процесс /etc/cron , интерпретируя справочные таблицы, лежащие в файле /usr/spool/cron/crontabs/sys. При втором способе (если не указан интервал опроса) sar выбирает данные из файла, куда они предварительно должны быть записаны. Этот файл либо указывается явно опцией -f, либо, по умолчанию
Пример:
В параллельном режиме 10 минут измерять загрузку ЦП, сохранив результаты в файле temp:
Взять данные из файла temp:
#9: mpstat - использование мультипроцессора
На многопроцессорных компьютерах mpstat позволяет получить статистику использования процессоров по отдельности, благодаря чему можно определить, насколько эффективно используется каждый процессор.
Пример вывода:
Linux 2.6.31-22-generic-pae (serv.lan) 17.02.2011 _i686_ (1 CPU)
19:55:15 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
19:55:15 all 2,60 0,00 1,61 4,93 0,27 1,18 0,00 0,00 89,41
19:55:15 0 2,60 0,00 1,61 4,93 0,27 1,18 0,00 0,00 89,41 |
#10: pmap - использование процессами оперативной памяти
Команда pmap выдает данные о распределении памяти между процессами.
Пример использования:
root@serv ~ # ps -A | grep trans
2277 ? 03:56:26 transmission-da
root@serv ~ # pmap -d 2277
2277: /usr/bin/transmission-daemon --config-dir /var/lib/transmission-daemon/info --allowed 192.168.0.* --peerport 51000 --auth --username myuser --password mypassword --watch-dir /megabig/transmission/torrents/ --download-dir /megabig/transmission/storage/
Address Kbytes Mode Offset Device Mapping
00110000 1204 r-x-- 0000000000000000 008:00001 libcrypto.so.0.9.8
0023d000 32 r---- 000000000012c000 008:00001 libcrypto.so.0.9.8
00245000 52 rw--- 0000000000134000 008:00001 libcrypto.so.0.9.8
00252000 16 rw--- 0000000000000000 000:00000 [ anon ]
00256000 64 r-x-- 0000000000000000 008:00001 libresolv-2.10.1.so
00266000 4 r---- 0000000000010000 008:00001 libresolv-2.10.1.so
00267000 4 rw--- 0000000000011000 008:00001 libresolv-2.10.1.so
00268000 8 rw--- 0000000000000000 000:00000 [ anon ]
0026a000 8 r-x-- 0000000000000000 008:00001 libdl-2.10.1.so
0026c000 4 r---- 0000000000001000 008:00001 libdl-2.10.1.so
0026d000 4 rw--- 0000000000002000 008:00001 libdl-2.10.1.so
0026e000 96 r-x-- 0000000000000000 008:00001 libsasl2.so.2.0.23
00286000 4 r---- 0000000000017000 008:00001 libsasl2.so.2.0.23
00287000 4 rw--- 0000000000018000 008:00001 libsasl2.so.2.0.23
00288000 8 r-x-- 0000000000000000 008:00001 libcom_err.so.2.1
…
…..
b6201000 328 rw--- 0000000000000000 000:00000 [ anon ]
b63bd000 4 ----- 0000000000000000 000:00000 [ anon ]
b63be000 10240 rw--- 0000000000000000 000:00000 [ anon ]
b6dbe000 4 ----- 0000000000000000 000:00000 [ anon ]
b6dbf000 10268 rw--- 0000000000000000 000:00000 [ anon ]
b77d0000 12 rw--- 0000000000000000 000:00000 [ anon ]
bf811000 84 rw--- 0000000000000000 000:00000 [ stack ]
mapped: 253228K writeable/private: 245360K shared: 0K |
Последняя строка обозначает следующее:
mapped – общее количество памяти, отведенное под файл
writeable/private - общее количество приватного адресного пространства
shared - общее количество адресного пространства, которое данный процесс использует совместно другими процессами
#11: netstat- Сетевая статистика
Команда netstat показывает содержимое различных структур данных, связанных с сетью, в различных форматах в зависимости от указанных опций.
Получить список всех уникальных IP адресов:
# netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq |
Получить общее количество уникальных IP адресов:
# netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq | wc –l |
Выясняем дидосят ли наш сервер
# netstat -atun | awk '{print $5}' | cut -d: -f1 | sed -e '/^$/d' |sort | uniq -c | sort –n |
Отображение суммарной информации для каждого протокола
# netstat -s | less
# netstat -t -s | less
# netstat -u -s | less
# netstat -w -s | less
# netstat –s |
Выясняем что за приложение висит на определенных портах
#12: ss - Сетевая статистика
Команда ss используется для захвата статистики сетевых сокетов. Она отображает информацию, сходную с выводом команды netstat.
Отобразим список всех установленных, закрытых или ожидающих TCP сокетов:
Выводим все открытые сетевые порты:
Для просмотра какой процесс использует открытый сокет используйте команду:
Вывести все TCP сокеты
Вывести все UDP сокеты
Вывести все установленные HTTP подключения
# ss -o state established '( dport = :http or sport = :http )' |
#13: iptraf – Сетевая статистика в реальном времени
IPTraf программа для просмотра статистики по соединениям и интерфейсам. Переход по меню осуществляется клавишами со стрелками. Большую часть времени все доступные опции и закрепленные за ними клавиши отображаются в нижней строке экрана.
#14: tcpdump – Детальный анализ сетевого трафика
Программа tcpdump служит для снятия дампов сетевого трафика.
Выводим траффик DNS запросов:
tcpdump -i eth0 'udp port 53' |
#15: strace – системные вызовы
Позволяет записывает на стандартный вывод все трассировочные сообщения псевдоустройств от всех драйверов и модулей.
К примеру данная команда отобразит все системные вызовы процесса strace и запишет их в выходной файл:
$ strace -o output.txt /bin/foo |
Будучи запущенной, программа strace выполняется до тех пор, пока ее не пррвет пользователь.
Выводить все трассировочные сообщения от драйвера с идентификатором 41:
#16: /Proc файловая система – различная статистика ядра
Файловая система /proc позволяет получить детальную информацию о различном железе и прочей информации ядра.
Примеры:
# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts |