Мониторинг Linux сервера
Любому системному администратору приходится постоянно "мониторить" свой сервер на предмет его производительности. Большинство дистрибутивов Linux укомплектованы массой мониторингового софта. Большую помощь администратору окажут предлагаемые 20 базовых программ, при помощи которых можно выявить узкие места в системе:
- Системы в целом
- Дисков и других накопителей
- Процессора и памяти
- Сетей
Команда top — Активность процессов
Команда top показывает активность процессов, запущенных в системе в режиме реального времени. По умолчанию команда выводит наиболее ресурсоёмкие процессы и обновляет их список каждые 5 секунд.
Вот список некоторых горячих клавиш:
t Включает/отключает вывод общей информации
m Включает/отключает вывод информации о памяти
A Сортирует процессы на дисплее по степени потребления различных ресурсов системы. Полезно для быстрого выявления задач, которым не хватает ресурсов.
f Включает интерактивный интерфейс для настройки top. Позволяет решать с помощью программы top различные задачи.
o Позволяет интерактивно настраивать очередность представления параметров системы в выводе top
r Включает команду renice (приоритет)
k Включает команду kill
z Включает/отключает цветной режим представления top
Команда vmstat — Информация об активности системы, памяти и прочего
Команда vmstat выдает информацию о процессах, памяти, страницах памяти, IO, активности процессора.
vmstat 3 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 386224 37264 243944 0 0 38 21 107 246 3 1 96 1 0 0 0 386264 37264 243944 0 0 0 0 268 379 3 0 97 0 0 0 0 386280 37272 243800 0 0 0 9 240 347 2 0 98 0 0 0 0 386280 37272 243808 0 0 0 0 207 353 0 0 100 0 0 0 0 386220 37272 243808 0 0 0 0 283 569 5 1 94 0 0 0 0 386108 37272 243808 0 0 0 0 234 630 2 0 98 0
Информация об использовании памяти от Slabinfo
vmstat -m
Информация об активных/неактивных страницах памяти
vmstat -a
Дополнительная информация: Как вычислить узкие места в использовании ресурсов Linux системы?
Команда w — Кто вошел в систему и что он делает
Команда w сообщает, кто из пользователей в данный момент залогинен в системе, когда зашел и какие процессы запустил.
w имя_пользователя
Например:
w vivek 17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w
Команда uptime — Сколько работает система
Команда uptime сообщит, сколько времени работает система
uptime 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
Команда ps — Выводит процессы
Команда ps выводит "моментальный снимок" идущих в системе процессов. Чтобы просмотреть список всех процессов, нужно применить опции -A или -e:
ps -A
PID TTY TIME C MD 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 .... ..... 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 ....
Полный формат представления
ps -Al
Сверх-полный формат (показывает какой командой запущен каждый процесс):
ps -AlF
Потоки, треды (LWP и NLWP)
ps -AlFH
Потоки, треды (Threads) после процессов
ps -AlLm
Показать все процессы на сервере
ps ax ps axu
Показать дерево процессов
ps -ejH ps axjf pstree
Показать информацию о безопасности
ps -eo euser,ruser,suser,fuser,f,comm,label ps axZ ps -eM
Показать все процессы пользователя
ps -U vivek -u vivek u
Дать вывод в определенном пользователем формате
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm ps -eopid,tt,user,fname,tmout,f,wchan
Показать только ID процесса bash
ps -C bash -o pid= 8708 8883
или
pgrep bash
или
pgrep -u vivek bash
Показать имя процесса по его ID
ps -p 55977 -o comm=
Показать 10 самых интенсивно потребляющих память процессов
ps -auxf | sort -nr -k 4 | head -10
Показать 10 самых интенсивно потребляющих CPU процессов
ps -auxf | sort -nr -k 3 | head -10
Команда free — Потребление памяти
Команда free покажет общее количество свободной и используемой физической памяти, своп, буферы и кэш ядра:
free total used free shared buffers cached Mem: 1034244 581060 453184 0 26488 215060 -/+ buffers/cache: 339512 694732 Swap: 1148608 0 1148608
Команда iostat — Загрузка процессора, активность диска
Команда iostat выводит статистику по процессору, а также статистику ввода/вывода дисков, разделов и сетевых файловых систем (NFS).
iostat
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009 avg-cpu: %user %nice %system %iowait %steal %idle 3.50 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.87 512.03 16189010 260102688 sda3 0.00 0.00 0.00 1615 0
Команда sar — Собирает, выводит и сохраняет информацию об активности системы
Команда sar делает срезы состояния системы через заданные промежутки времени и сохраняет эти срезы в файлы sa1, sa2, sa3...sa24.
Чтобы просмотреть срез работы в сети:
sar -n DEV | more
Чтобы просмотреть срез работы в сети из файла sa24:
sar -n DEV -f /var/log/sa/sa24 | more
Можно также смотреть срезы активности системы в режиме реального времени:
sar 4 5
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009 06:45:12 PM CPU %user %nice %system %iowait %steal %idle 06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78 06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52 06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78 06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22 06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19 Average: all 2.02 0.00 0.27 0.01 0.00 97.70
где цифры 4 и 5 означают частоту и продолжительность срезов (см. ман sar).
Команда mpstat — Загруженность нескольких CPU
Если в системе больше одного процессора, то команда mpstat покажет нагрузку на каждый их них, начиная с нулевого.
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
Команда pmap — Потребление памяти процессом
Команда pmap выдает схему потребления памяти указанным процессом.
Например, чтобы получить схему потребления памяти процессом 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 количество пространства, общего (shared) с другими адресами
Команды netstat и ss — Сетевая статистика
Команда netstat выводит сетевые соединения, таблицы маршрутов, статистику по сетевым интерфейсам и прочее. Команда ss ведет дамп статистики сокетов, что позволяет получать информацию сходную с таковой команды netstat.
Команда iptraf — Сетевая статистика в реальном времени
Команда iptraf — интерактивная разноцветная команда, мониторящая сетевые соединения. В удобном формате представит следующие показатели:
- Трафик по соединению TCP
- Статистику сетевого трафика
- Статистику трафика по протоколам
- Статистику трафика по TCP/UDP портам и по размеру пакетов
- Статистику трафика по Layer2 адресам
Команда tcpdump — Детальный анализ трафика
Эта простая команда требует для работы с ней хорошего понимания протокола TCP/IP.
Например, чтобы просмотреть трафик по DNS, следует ввести:
tcpdump -i eth1 'udp port 53'
Чтобы вывести все IPv4 HTTP пакеты, входящие и исходящие из порта 80, то есть учитывать только пакеты данных, а не пакеты SYN, FIN и ACK-only, введите следующую команду:
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Чтобы просмотреть всю FTP сессию на адрес 202.54.1.5, введите:
tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'
Чтобы просмотреть всю HTTP сессию на адрес 192.168.1.5:
tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'
Чтобы просмотреть детальную информацию по файлам, введите:
tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80
Можно использовать для этой цели программу wireshark
Команда strace — Системные вызовы
Программа отслеживает системные вызовы и сигналы. Полезно для отладки веб сервера и прочих серверных проблем. Как пользоваться этой программой рассказано в статье "trace the process".
Файловая система /proc — Всевозможная статистика ядра
Файловая система /proc содержит детальную информацию о различных устройствах и прочую информацию ядра Linux. Для ее просмотра используйте:
cat /proc/cpuinfo cat /proc/meminfo cat /proc/zoneinfo cat /proc/mounts
Nagios — Мониторинг сервера и сетей
Nagios — популярная мониторинговая копьютерная система с открытыми исходниками. Она держит под контролем все ваши хосты, сети, сетевое оборудование и сервисы. Если что-то идет неправильно, то она даст предупреждение; пошлет сообщение, если дела нормализовались.
FAN расшифровывается как Полностью Автоматизированный Nagios и обеспечивает установку Nagios и множества инструментов от сообщества Nagios. CDRom в обычном ISO формате обеспечивает удобную установку сервера Nagios.
Cacti — Он-лайн мониторинговый инструмент
Cacti - интерфейс к RRDTool, позволяющий создавать разнообразные графики, используя информацию из MySQL. Обеспечивает быструю обработку, продвинутое графическое представление, множественные методы сбора данных, управление пользователями прямо "из коробки". Имеет интуитивный и простой интерфейс. Собирает данные о сетях, CPU, памяти, пользователях, Apache, DNS серверах и о многом другом. Смотрите статью "how to install and configure Cacti network graphing under CentOS / RHEL"
KDE System Guard — Отчеты и графики о состоянии системы в реальном времени
KSysguard — это приложение KDE, производящее мониторинг системы в реальном времени, в том числе и через сеть в сеансе ssh. Позволяет мониторить локальную и удаленные системы. Графическое представление использует так называемые сенсоры, собирающие выводимую информацию. Сенсоры может представлять простые параметры, либо более сложную информацию в виде таблиц. Для каждого типа данных существует один или несколько дисплеев, которые организованы в блоки, которые можно сохранять и загружать независимо друг от друга. Таким образом, KSysguard не просто простой менеджер задач, но также и мощный инструмент контроля за большим сервером.
Gnome System Monitor — Отчеты и графики о состоянии системы в реальном времени
System Monitor позволяет отслеживать основную информацию о системе и мониторить системные процессы, системные ресурсы и файловые системы. С его помощью можно изменять поведение вашей системы. Хотя и не такой мощный как KSysguard, он обеспечивает мониторинг основных параметров системы как то:
- Показывает базовую информацию о системном "железе" и софте
- Показывает версию ядра Linux
- Показывает версию GNOME
- Оборудование
- Физическая память
- Процессоры и их скорости
- Статус системы
- Свободное место на дисках
- Процессы
- Память и своп
- Сети
- Файловые системы
- Примонтированные ФС и информацию о них
Бонус: Еще несколько инструментов
- nmap — отыщет на сервере открытые порты
- lsof — Выводит список открытых файлов, сетевые соединения и многое другое.
- ntop — Он-лайн приложение, позволяет увидеть сетевые соединения примерно так же как команда top выводит процессы, мониторит трафик по каждому из протоколов: UDP, TCP, DNS, HTTP и других.
- Conky — Инструмент мониторинга системы для Х-ов. Гибко настраивается и позволяет отслеживать многие параметры: CPU, память, пространство свопа, использование дисков, температуру, процессы, сетевые соединения, батарею, системные сообщения, почту и так далее.
- GKrellM — Может использоваться для мониторинга: статуса CPU, памяти, дисков, сетей, локальных и удаленных почтовых ящиков и прочего.
- vnstat — Консольный анализатор трафика. Ведет лог трафика по часам, дням и месяцам для избраных соединений.
- htop — Усовершенствованная версия top, интерактивный монитор процессов, способный выдавать картину в виде дерева.
- mtr — Инструмент диагностики сетевых соединений, сочетает в себе трейсрутер и пингователь.