- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF110:DrBrown3
Материал из Linuxformat.
Содержание |
Кто сожрал процессор?
- Top и VMstat Наблюдаем за драгоценными системными ресурсами.
Другая вещь, о которой я хотел поговорить сегодня – это утилиты мониторинга системных ресурсов. Мы рассмотрим инструменты командной строки (и графические), которые дают статистику использования таких системных ресурсов, как память, процессор и дисковое пространство. Они незаменимы, когда вы пытаетесь найти вредоносный процесс, который съел все ресурсы процессора, или определить, почему вдруг иссякло место на диске, или просто решить, повысится ли производительность, если прикупить еще памяти.
Начнем с моего любимого – top. Он мне нравится потому, что выводит всю важную информацию о ресурсах на одном экране, автоматически обновляет статистику и имеется во всех дистрибутивах Linux. В верхней части вывода команды (экранный снимок на врезке далее) отображается общее использование ресурсов.
Этот снимок был сделан, когда компьютер был сильно загружен, процессор не простаивал, а свободной памяти было очень мало. Внизу показаны процессы, сортируемые по любой из выбранных вами колонок. Стандартное упорядочение – по использованию процессорного времени (% CPU), но его можно изменить. Нужно набраться терпения, чтобы привыкнуть к командам, которые использует top – это набор однобуквенных сокращений. Начните с нажатия h для вывода краткого списка команд или ознакомьтесь с разделом man – он весьма основательный, хотя и немногословный. Можно, например, изменить частоту обновления экрана, назначить отображаемые столбцы, выбрать колонку и порядок сортировки, отображать процессы только для заданного пользователя и многое другое. Наряду с настройкой top с помощью этих однобуквенных команд многие опции можно задать в параметрах командной строки, и настройки можно сохранить в файле конфигурации до следующего вызова top. И пока администраторы Windows не пожаловались, что нельзя сортировать данные по определенному столбцу, просто кликнув на нем, напомните им, что top – полностью консольное приложение, и ему не нужен графический рабочий стол; зато он идеально подходит для серверов.
VMstat
Еще одна утилита командной строки для вывода информации об использовании ресурсов – это VMstat (сокращение от virtual memory statistics – статистика виртуальной памяти). Она стара как мир – я помню ее еще в ранних версиях SunOS, хотя тогда я гораздо хуже разбирался в ее выводе! В первой строке отображаются средние значения, и на них можно не обращать внимания. Оставшиеся строки генерируются через равные промежутки времени – например, пять секунд. Интерпретировать вывод команды – примерно то же, что решить, какие новости хорошие, какие – плохие, а какие – ну, просто новости. Например, интенсивность операций подкачки в столбцах ‘si’ и ‘so’ может означать нехватку памяти, тогда как активность операций ввода/вывода в столбцах ‘bi’ и ‘bo’ просто показывает, что происходит обращение к файловой системе.
Еще одна важный ресурс – дисковое пространство. Утилита df незаменима, когда нужно определить количество свободного места на диске, и если оно уменьшается, утилита du подскажет, куда оно ушло! df отображает количество используемого и свободного места на диске для каждой смонтированной файловой системы. Опция -h, которой я всегда пользуюсь, изменяет единицы измерения, делая их более удобными для простых смертных, например, свободно ‘'37G’ вместо ‘38,212,204 блоков’. Вот пример вывода команды:
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 37G 25G 9.7G 73% / varrun 1006M 264K 1005M 1% /var/run varlock 1006M 0 1006M 0% /var/lock udev 1006M 44K 1006M 1% /dev devshm 1006M 12K 1006M 1% /dev/shm
Последние четыре строки относятся к виртуальным файловым системам и нам не интересны. Первая строка сообщает, что корневая файловая система практически заполнена – наверное, больше, чем следовало бы, и это обстоятельство заслуживает дальнейшего исследования.
Для ответа на вопрос «Куда девалось свободное место на диске?» можно воспользоваться несколькими подходами. Первый, и, наверное, более импульсивный – предположить, что дисковое пространство используется несколькими огромными файлами. Найти их можно командой find, например:
# find / -size +1000M 2> /dev/null /home/camilla/gossip
Эта команда ищет все файлы с размером более 1000 МБ. В данном случае, нашелся файл /home/camilla/gossip, который и правда огромен:
# ls -lh /home/camilla/gossip -rw-r--r-- 1 root root 9.6G 2008-07-06 07:31 /home/camilla/gossip
Признаюсь, что этот файл, вроде ружья на стене в первом действии театральной постановки, помещен сюда неспроста. Команда du более систематично выясняет, куда девалось дисковое пространство. Начать можно с этого примера. Он покажет пять самых больших директорий в корневом каталоге:
# du -s /* 2> /dev/null | sort -nr | head -5 18834900 /home 5623532 /usr 901412 /lib 660688 /media 502952 /var
Хм, каталог /home довольно велик – интересно, что там?
# du -s /home/* 2> /dev/null | sort -nr | head -5 10009800 /home/camilla 4141604 /home/fred 3865484 /home/chris 809720 /home/ellie 8268 /home/tom
Однако и аппетиты у Камиллы! Копнем поглубже:
# du /home/camilla/* 4 /home/camilla/appointments 0 /home/camilla/Examples 10009784 /home/camilla/gossip 4 /home/camilla/new-year-resolutions 4 /home/camilla/to-do-list
Вот мы и вышли на огромный файл /home/camilla/gossip. Наверное, пора писать вежливое письмо Камилле.
Графические утилиты
Завершим наш обзор несколькими графическими утилитами. Первая – KDE System Guard. Для ее вызова (например) в OpenSUSE 11.0 используется пункт меню Applications > System > Monitor > System Monitor [Приложения > Система > Наблюдение > Системный монитор]. В этой программе есть таблица процессов, которую можно отсортировать по любому столбцу, например, по использованию процессора или памяти (вариант top с мышью) и индикатор загрузки с графиками различных характеристик загрузки системы, которые плавно движутся справа налево.
Наконец, в Gnome есть очень удобное приложение для анализа дискового пространства Baobab. Я просто обязан о нем рассказать: оно и правда очень милое. Данный конкретный образец был найден в дебрях Ubuntu 8.04.
На панели слева находится классическое дерево файловой системы с маленькими треугольничками, которыми можно разворачивать данные. Небольшие полоски показывают размер каждого подкаталога в процентах от размера каталога уровнем выше. Справа отображается диаграмма использования дискового пространства выбранного слева каталога (в данном случае, корневого). Серый кружок в середине – это полный каталог верхнего уровня, кольцо вокруг него показывает каталоги на уровень ниже (в данном случае, /home, /usr/, /lib и другие), и перемещаясь по внешним кольцам, вы постепенно видите каталоги все более и более нижнего уровня в дереве. На каждом уровне каждый «кусок пирога» соответствует одному каталогу, а величина куска отражает долю от каталога верхнего уровня, который он занимает. Это прекрасная маленькая диаграмма, отражающая сравнительные размеры каталогов, и она помогает нам сразу понять, что Камилла использует большой объем файлового пространства непосредственно в своем домашнем каталоге. LXF
Пример вывода команды top
Пример вывода команды VMstat
Полезные утилиты
Утилита | Описание |
---|---|
top | Выводит информацию об использовании процессора, оперативной и виртуальной памяти вместе со списком процессов, отсортированным по заданному критерию. |
vmstat | Выводит подробную статистику использования памяти и процессора в табличном виде через равные интервалы времени. |
ps | Показывает активность процессов. Имеет массу ключей, определяющих, какие процессы выводить и какую информацию показывать о каждом из них. |
df | Отображает свободное дисковое пространство (или индексные дескрипторы) для каждой примонтированной файловой системы. |
lsof | Отображает открытые дескрипторы файлов, например, все дескрипторы файлов для заданного процесса или все TCP-подключения для всех процессов и т.д. |
/proc | Это не команда, а каталог, где смонтирована файловая система proc, дающая информацию обо многих внутренних структурах данных ядра. Большая часть сведений, которые здесь можно найти, очень низкоуровневая; ее удобно обобщают другие утилиты из данной таблицы. |