Ищите систему мониторинга производительности Linux-серверов? Попробуйте уже имеющийся в системе команды, а также те, которые можно добавить. Большинство современных linux-систем уже оснащены кучей всевозможных программ для мониторинга. Эти инструменты предоставляют возможность для получения информации о деятельности системы. Вы можете использовать эти инструменты для поиска причин проблем возникающих в производительности системы.
Команды, приведённые ниже, являются самыми основными, когда речь идет о системе анализа и отладки сервера, а также таких вопросов, как:
- Выявление "узких мест"
- "Узкие места" в дисках (хранилищах)
- "Узкие места" в процессорах и памяти
- "Узкие места" в сети
1. Top - команда активности процессов
Команда top показывает нам динамически и в режиме реального времени вид работающей системы, т.е. активность запущенных системных процессов. По умолчанию, нам показывается большинство активных процессорных задач на сервере в виде листа, обновляющегося каждые 5 секунд.
Наиболее используемые ключи
Команда top имеет несколько полезных ключей:
-b "Пакетный режим", используется для отправки вывода в другую программу или в файл.
-u Мониторинг процессов запущенных от имени конкретного пользователя.
-P Мониторинг только указанных процессов. Процессы указываются по их идентификационному номеру (PID).
-s Безопасный режим. Top стартует в принудительном безопасном режим, даже для суперпользователя. Этот режим лучше всего контролируется через систему конфигурационного файла. Более подробную информацию можно посмотреть с помощью команды man top.
2. Vmstat - активность системы, информация о "железе" и системе.
Команда vmstat выводит информацию о процессах, памяти, страничном обмен, блокировке ввода-вывода, ловушках и активности процессора.
# vmstat -S M
Вывод команды:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 909 116 487 0 0 37 20 241 708 12 1 86 1
Где, первая строка показывает 6 категорий, вторая - это более подробная информация о каждой из категорий.
-S M - единицы измерения по вашему выбору (k, K, m, M), по умолчанию - это K (1024 байта). В данном примере используется M, т.к. система имеет более 4Гб оперативной памяти. Без ключа -M как единица измерения будет использоваться K
3. W - находит кто в данный момент залогинен в системе и что он делает.
Команда w выводит информацию о пользователях, залогиненных в данный момент в системе, и их процессах, а также сколько времени они залогинены и с какого хоста они подключились к системе (если это удалённые пользователи)
# w user
Вывод команды:
16:59:51 up 1:11, 2 users, load average: 0,16, 0,35, 0,36
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user :0 - 15:51 ?xdm? 19:21 0.01s /bin/sh /usr/bin/x-session-manager
user pts/0 :0 15:51 1:08m 0.00s 0.01s /usr/bin/kwrited
4. Uptime - говорит нам как долго работает система без перезагрузки.
Команда uptime используется для получения информации о времени (дней, часов, минут и секунд) безостановочной работы сервера, а также с её помощью можно узнать текущее время, какое количество пользователей залогинено на сервере в данный момент.
# uptime
Вывод команды:
17:44:06 up 17 days, 4:18, 1 user, load average: 0.03, 0.02, 0.00
5. Ps - показывает процессы.
Команда ps выводит список текщих процессов. Для выбора всех процессов необходимо использовать ключи -A или -s. Команда ps очень похожа на команду top, только выдаёт больше информации.
Вывод команды:
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:02 migration/0
3 ? 00:00:01 ksoftirqd/0
4 ? 00:00:00 watchdog/0
5 ? 00:00:00 migration/1
6 ? 00:00:15 ksoftirqd/1
....
.....
4881 ? 00:53:28 java
4885 tty1 00:00:00 mingetty
4886 tty2 00:00:00 mingetty
4887 tty3 00:00:00 mingetty
4888 tty4 00:00:00 mingetty
4891 tty5 00:00:00 mingetty
4892 tty6 00:00:00 mingetty
4893 ttyS1 00:00:00 agetty
12853 ? 00:00:00 cifsoplockd
12854 ? 00:00:00 cifsdnotifyd
14231 ? 00:10:34 lighttpd
14232 ? 00:00:00 php-cgi
54981 pts/0 00:00:00 vim
55465 ? 00:00:00 php-cgi
55546 ? 00:00:00 bind9-snmp-stat
55704 pts/1 00:00:00 ps
# ps -Al - показывает вывод в длинном формате
# ps -AlF - вывод в наиболее длинном формате.
# ps -AlFH - просмотр треда
# ps -AlLm - просмотр треда после процесса
# ps ax или ps axu - печать всех процессов на сервере.
# pstree - печать дерева процессов.
# ps axZ - печать системы безопасности.
# ps -U user -u user u - посмотреть ве процессы запущенные пользователем user.
# ps -C kopete -o pid= или pgrep kopete - узнать PID процесса kopete.
# ps -p 3674 -o comm= - узнать название процесса, зная PID.
# ps -auxf | sort -nr -k 4 | head -10 - просмотреть первые 10 процессов в памяти.
# ps -auxf | sort -nr -k 3 | head -10 - просмотреть первые 10 CPU-процессов.
6. Free - использование памяти.
Команда free показывает общую сумму свободной и используемой физической и своп-памяти, а также как буферы используют ядро.
# free
Вывод команды:
total used free shared buffers cached
Mem: 2061400 1443856 617544 0 133316 832268
-/+ buffers/cache: 478272 1583128
Swap: 1188768 0 1188768
# free -b - вывести общую сумму в байтах.
# free -k - вывести общую сумму в килобайтах.
# free -m - вывести общую сумму в мегабайтах.
# free -t - вывод общих показателей.
7. Iostat - средняя загрузка процессора, активность диска.
Вывод команды:
Linux 2.6.28-13-generic (base) 07.07.2009 _i686_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
17,36 0,65 5,36 1,22 0,00 75,53
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 7,06 209,10 138,47 1693301 1121352
sda1 6,91 208,84 138,47 1691216 1121352
sda2 0,00 0,00 0,00 6 0
sda5 0,01 0,22 0,00 1759 0
sdb 0,01 0,40 0,00 3244 0
sdb1 0,00 0,34 0,00 2748 0
8. Sar - сбор и вывод в отчёт системную активность.
Команда sar используется для сбора, отчётов и сохранения информации о системной активности. Для просмотра счётчика сети введите:
# sar -n DEV | more
Для просмотра счётчика за последние 24 часа введите:
# sar -n DEV -f /var/log/sa24 | more
Для просмотра информации в реальном времени используйте:
# sar 4 5
Вывод команды:
Linux 2.6.28-13-generic (base) 08.07.2009 _i686_ (2 CPU)
00:13:25 CPU %user %nice %system %iowait %steal %idle
00:13:29 all 13,54 0,00 7,12 0,47 0,00 78,88
00:13:33 all 12,81 0,00 5,82 0,23 0,00 81,14
00:13:37 all 12,09 0,00 7,16 0,00 0,00 80,75
00:13:41 all 11,67 0,00 7,09 0,00 0,00 81,24
00:13:45 all 15,98 0,11 6,90 0,00 0,00 77,01
Среднее: all 13,22 0,02 6,82 0,14 0,00 79,80
9. Mpstat - многопроцессорное использование.
Команда mpstat отображает активность для кажого доступного процессора. Процессор 0 является первым. mpstat -P ALL показывает среднее значение нагрузки на все процессоры.
# mpstat -P ALL
Вывод команды:
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04
06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31
06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93
06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00
06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80
06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91
06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98
06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75
06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89
10. Pmap- процессы использующие память.
Команда pmap выводит карту процессов загруженных в память компьютера. Используется для поиска причин возникновения "узких мест".
# pmap -d PID
Для просмотра процесса в памяти с PID # 47394 введите:
# pmap -d 47394
Вывод команды:
47394: /usr/bin/php-cgi
Address Kbytes Mode Offset Device Mapping
0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
.....
......
..
00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 933712K writeable/private: 4304K shared: 768000K
Последняя строка в этом выводе очень важна:
mapped: 933712K общая сумма файлов в памяти
writeable/private: 4304K сумма общего адресного пространства
shared: 768000K сумма адресного пространства этого процесса вместе со всеми остальными процессами
11. Netstat - проверка конфигурации сети и её активности.
На самом деле netstat - это набор нескольких инструментов собранных воедино.
-n выводит список IP-адресов (а не символических хостов и названий сетей) с которыми в данный момент имеется активное соединение. Особенно полезно если вы не хотите избежать поиска адреса в вашей сети (т.е. из DNS или NIS-серверов). Другими словами, чтобы ваш запрос не резольвился DNS-сервером.
-r выводит таблицу маршрутизации
-i выводит таблицу ваших сетевых интерфейсов.
-s выводит подробную статистику сети (как SNMP)
# netstat -ta
Вывод команды:
Active Internet Connections
Proto Recv-Q Send-Q Local Address Foreign Address (State)
tcp 0 0 *:domain *:* LISTEN
tcp 0 0 *:time *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED
tcp 0 0 *:chargen *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 *:discard *:* LISTEN
tcp 0 0 *:echo *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
tcp 0 0 *:login *:* LISTEN