Откуда:
1 2 |
МОНИТОРИНГ ПРОИЗВОДИТЕЛЬНОСТИ И РАБОТОСПОСОБНОСТИ BSD Кардиограф для чертенка ЕВГЕНИЙ ЗОБНИН АКА J1M (J1M@LIST.RU) |
Вступление:
1 2 3 4 |
В поставку BSD-систем входит несколько программ, позволяющих провести анализ работоспособности отдельных компонентов ядра и всей системы в целом. Большинство из них являются представителями семейства утилит *stat (vmstat, iostat, pstat, fstat, netstat, systat) и предназначены для сбора статистики, другие служат несколько иным целям, но так же занимают почетное место в инструментальном наборе системного администратора. И те и другие являются незаменимыми помощниками системного администратора (и часто - пользователя домашнего ПК). |
uptime:
1 2 3 4 5 6 7 8 9 10 11 |
Традиционно, в UNIX-системах для выявления средней загруженности системы используют команду /usr/bin/uptime. $ uptime 14:05:06 up 41 min, 4 users, load average: 0.03, 0.08, 0.03 В выводе этой команды присутствует информация о текущем времени. Времени, пройденном с момента загрузки системы, числе зарегистрированных пользователей и средней загруженности системы. Причем уровень нагрузки представлен не в процентах, а в усредненном количестве процессов, ждущих своего исполнения за последние 5, 10 и 15 минут. В слабо загруженной системе эти значения не поднимаются выше единицы. Внимательно следя за этими значениями, можно выявить момент, когда нагрузка на систему станет чрезмерной и предпринять соответствующие меры. Значения нагрузки 5.0-6.0 говорят о том, что система загружена на 100%, и пора искать виновников проблемы. |
ps:
1 2 3 4 |
Для выявления подозрительного процесса можно использовать команду /bin/ps с флагами '-aux'. В колонке %CPU для каждого процесса будет указано время использования процессора в процентах. Таким способом достаточно легко выявить проблемный процесс. Недостаток данного подхода - в том, что с его помощью можно увидеть только моментальный снимок состояния процессов. |
top:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
Для получения полной картины происходящего в реальном времени лучше использовать программу /usr/bin/top. Top, наверное, чаще всех остальных программ используется для выявления проблем с нагрузкой на процессор и память. Она выводит на экран список самых «прожорливых» процессов и регулярного его обновляет. Используя top, легко определить, какие из процессов наиболее требовательны к ресурсам. Окно top разделено на две зоны: в верхней отображается различная системная статистика, в нижней - таблица «особо требовательных» процессов. Рассмотрим эти зоны подробнее. В первой строке отображается различная информация: последний PID, назначенный процессу, загруженность системы, время, прошедшее с момента загрузки и системное время. Вторая строка содержит информацию о процессах: общее количество и количество процессов, находящихся в каждом из пяти состояний: спячка (sleeping), исполнение (running), готов к запуску (starting), зомби (zombies), приостановлен (stopped). Третья строка сообщает нам о времени (в процентах), затрачиваемом процессором на выполнение кода программ (user), выполнение кода программ с повышенным приоритетом (nice), обработку системных вызовов (system), обработку прерываний (interrupt), время простоя (idle). Четвертая строка предназначена для отображения информации о памяти: объем используемых станиц памяти (Active), объем неиспользуемых страниц памяти (то есть тех страниц, которые могут быть выгружены на диск, Inact), объем выгруженных страниц (не обязательно в своп, - нужная страница может находиться в исполняемом файле, Wired), объем страниц, используемых для хранения дискового кэша (Cache), объем страниц, содержащих буферы (Buf) и объем свободных страниц. Пятая строка сообщает об объеме своп-области и степени его заполненности. Нижняя часть экрана отведена под таблицу процессов. Поля таблицы отображают следующую информацию: PID процесса (PID), имя владельца процесса (USERNAME), приоритет процесса, назначенный ядром (PRI), приоритет процесса, назначенный пользователем (NICE), общий размер процесса (SIZE), размер процесса в оперативной памяти (RES), состояние процесса (STATE), количество секунд процессорного времени ушедшее на исполнение процесса (TIME), прогнозируемая загрузка процессора в процентах (WCPU), загрузка процессора (CPU). Процесс, наиболее интенсивно использующий процессор, будет отображаться в первой строке. Самые «прожорливые» процессы обычно имеют высокие значения в колонках TIME и CPU. Не стоит доверять значениям колонки WCPU, они используются планировщиком задач и могут показывать совершенно дикие числа вроде 1000%. Поведением top можно управлять с помощью интерактивных команд. Например, после нажатия Ctrl+L информация на экране немедленно обновиться, команда i убирает с экрана все спящие процессы и на экране остается только информация о процессе, выполняющимся в данный момент. Отличный способ быстрого выявления негодяев. Существует еще несколько других команд, многие из которых имеют аналог в виде флага командной строки. Рассмотрим эти флаги: Флаги '-q' и '-u' очень полезны в тех случаях, когда нагрузка на систему столь велика, что top не в состоянии быстро загрузиться. Опции командной строки top s - показывать системные процессы (команда s) i - не показывать спящие процессы (команда i) t - не показывать самого себя (команда t) mcpu - статистика cpu mio - статистика ввода/вывода (команда m) q - установить процессу top наивысший приоритет u - показывать uid вместо имени пользователя s - временной промежуток между обновлениями (команда s, значение по умолчанию - 2) u - показывать процессы только данного юзера (команда u) h - показывать нити (команда h) |
vmstat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Статистика виртуальной памяти Если треск жесткого диска стал очень частым и надоедливым, то это свидетельствует об одном - о высокой интенсивности операций подкачки. При острой нехватке оперативной памяти подсистема VM ядра начинает лихорадочно работать со swap-областью, выгружая и вновь загружая не умещающиеся в основной памяти данные. Чтобы убедиться в правоте этого высказывания, достаточно выполнить команду /usr/sbin/swapinfo или /usr/sbin/pstat -s и посмотреть на степень заполненности swap-области. Для получения подробной статистики о работе подсистемы виртуальной памяти обычно используют команду /usr/bin/vmstat. Ее можно найти практически в любой UNIX-системе, начиная с HP-UX и заканчивая Linux. Vmstat печатает информацию, разбивая ее на шесть тематических разделов: procs - информация о процессах, memory - количество доступной памяти, page - активность страничной подкачки, disks - операции с диском, faults - переключения контекста и прерывания, cpu - использование процессора. Не вся эта информация связана напрямую с подсистемой виртуальной памяти, но печатается для того, чтобы можно было получить полную картину происходящего и быстро определить причины возникновения той или иной ситуации. Каждый из перечисленных разделов содержит несколько колонок. Разберем их подробнее: Информация в разделах page, fault и disks представлена в форме «числов секунду», в остальных разделах значения приводятся на момент снятия информации. По умолчанию vmstat печатает данные один раз, и чтобы увидеть статистику в реальном времени, следует запускать программу так: «vmstat <интервал> <количество повторов>». Понаблюдав некоторое время за листингом, можно определить, все ли в порядке, или что-то идет не так. Например, если значение в колонке w раздела procs часто становится больше нуля, значит, готовые к работе процессы перемещаются в своп, и это говорит о нехватке памяти. О том, что памяти не хватает, так же можно узнать, понаблюдав за полем fr раздела page. Если значение этого поля становится слишком высоким, значит либо завершилось исполнение большой программы, либо памяти просто не хватает. Зная принципы работы подсистемы виртуальной памяти и постоянно просматривая листинги vmstat, можно почти со сто процентной вероятностью определить, в какой момент системе начнет не хватать памяти. Полную статистику за все время непрерывной работы ОС можно узнать, указав флаг '-s'. В выводе будет присутствовать информация не только о количестве занятых и освобожденных страниц, но так же общее число системных вызовов, вызовов fork(2) и другой статистической информации. Статистика количества прерываний, поступивших от устройств, выводится после указания флага '-i'. Любопытной для интересующихся внутренностями ядра может оказаться информация о памяти, выделенной ядром для своих нужд (флаг '-m'). |
iostat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Статистика ввода/вывода Для наблюдения за пропускной способностью жесткого диска в BSD (да и в большинстве UNIX-систем) используют команду /usr/bin/iostat. Формат выходной информации этой команды сходен с форматом команды vmstat. Данные так же разбиты на разделы. В первых двух колонках tin и tout (раздел tty) содержится информация о числе символов, введенных и выведенных терминалами и псевдо-терминалами за секунду (практически бесполезная информация). Каждый из последующих разделов соответствует конкретному блочному устройству. За устройством закрепляется три колонки: KB/t - объем информации (в килобайтах), переданный за одну пересылку данных, tps - количество пересылок данных в секунду, MB/S - объем данных (в мегабайтах), переданных за секунду. В последнем разделе, по традиции, содержится статистика использования процессора. Iostat показывает столько разделов устройств, сколько умещается на дисплей 80 на 25 символов (причем независимо от реального размера терминала). К счастью, можно указать программе не показывать разделы tty и cpu, запустив ее с флагом '-d'. Просматривая листинги vmstat, можно определить, работает ли жесткий диск с полной скоростью, или его что-то ограничивает (например, PIO-режим вместо DMA). Запустив команду с флагом '-I', можно так же просмотреть статистику за все время работы системы, а не только данные о количестве переданной информации в секунду. В этом случае, к каждому устройству будут привязаны такие колонки: KB/t - объем информации (в килобайтах), переданный за одну пересылку данных, xfrs - общее количество пересылок данных, MB - общий объем переданных данных. |
systat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
----------------------------------------- Sysstat содержит следующие утлиты: (для debian \ apt install sysstat) * iostat: отчеты об использовании процессора и дискового ввода/вывода * mpstat: отчеты об использовании процессора как полностью так поядерно * pidstat: отчеты об задачах (процессах) * sadf: отчёты by sar в различных форматах * sar: отчеты с информацией о системе * cifsiostat: отчёты об операциях ввода-вывода для файловой системы CIFS * nfsiostat-sysstat: (устаревшее) отчёты об операциях ввода-вывода для сетевых файловых систем ----------------------------------------- Один за всех В стандартную поставку BSD-систем входит программа, аккумулирующая возможности всех рассмотренных выше программ. Имя ей , и она не только может представить нам практически все возможности таких программ как vmstat, iostat и netstat, но и делает это в более понятной форме в реальном времени. Будучи основанной на библиотеке ncurses, systat не печатает данные последовательно на терминале, а создает собственное окно (окно не в терминологии X Window, а в терминологии ncurses) и регулярно обновляет его. При запуске systat делит экран на две области. В верхней всегда отображается степень нагрузки на систему (та самая, о которой сообщает команда uptime), содержимое нижней зависит от режима, в котором работает программа. При запуске без флагов в нижней части отобразится лишь информация о процессе, наиболее интенсивно использующем процессор. Для смены режима работы следует перейти в командный режим (ввести ':' как в vi и less) и ввести его имя, либо указать имя в командной строке (не забыв про знак '-'). Всего существует 11 режимов: pigs - стандартный, swap - информация о swap-областях, iostat - статистика ввода/вывода, vmstat - статистика виртуальной памяти, netstat - сетевая статистика, icmp, ip, icmp6, ip6, tcp - количество переданных/посланных сообщений по определенному протоколу, ifstat - количество переданного трафика по каждому из сетевых интерфейсов. |
Статистика vmstat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
procs: r - количество готовых к запуску процессов b - количество заблокированных в ожидании ресурсов процессов w - количество готовых к запуску, но перемещенных в своп, процессов memory: avm - объем доступной виртуальной памяти fre - объем свободной памяти page: flt - количество «промахов» (обращений к страницам, которых нет в данный момент в оперативной памяти) re - число возвращенных (восстановленных из списка неиспользуемых) страниц pi - количество подкаченных страниц po - количество выгруженных страниц fr - количество освобожденных страниц sr - число страниц, обработанных по алгоритму «часы» (алгоритм «часы» используется для пометки давно не использовавшихся страниц) faults: in - число прерываний sy - число системных вызовов cs - число переключений контекста disks: число операций с дисками cpu: us - время, истраченное на исполнение кода программ sy - время, истраченное на исполнения кода ядра (системные вызовы, ввод/вывод) id - время простоя top-like программы терминология vm: active - используемая страница памяти inactive - занятая, но неиспользуемая страница (может быть выгружена в swap-область) wired out - выгруженная страница памяти cache - страница используется для хранения дискового кэша buf - страница используется для хранения буфера ввода/вывода free - свободная страница |
софт:
1 2 3 4 5 6 7 8 |
xtop - версия программы для x-window ktop - top для kde htop - дружелюбный top ntop - мониторинг сетевой активности mytop & mtop - мониторинг запросов к mysql dnstop - мониторинг dns-запросов itop - мониторинг генерации прерываний apachetop - мониторинг популярного web-сервера |