понедельник, 28 сентября 2009 г.

7 консольных инструментов для мониторинга системы

1. top и htop













top - незаменимая программа, которая есть в каждом дистрибутиве. Показывает активность процессов в системе,
нагрузку на процессор, использование памяти и т.д.
Наиболее используемые мною хоткеи:
h - справкаZ - настройка цветов
A - выводит наиболее прожорливые процессы
u - показать процессы определённого пользователя
O - выбор метода сортировки
k - убить процесс
q - выход из программы.

htop - это продвинутый top, и информация выводимая им более удобна для восприятия.










2. dstat
Одна из моих любимых утилит. Это vmstat, iostat, netstat, nfsstat и ifstat в одном флаконе.










Пара опций, которыми я чаще всего пользуюсь:
-c цпу статистика
-d статистика по жёсткому диску
-m использование памяти
-n использование сети


3. ps
очень полезная команда. Делает снимок протекающих в данный момент времени в системе процессов.
Если к примеру нужно убить подвешивающий систему процесс как можно быстрее, а для этого нужно узнать его PID, то можно сделать так:
ps -A | grep -i java
И эта команда нам выдаст:
7789 ? 00:05:44 java
Ну а потом с чистым сердцем:
kill -9 7789
Списко опций прямо-таки гигантский, поэтому:
man ps


4. du и df
Эти команды незаменимы, когда требуется уточнить чем же занято всё свободное место.
Для получения размера папки:
du -sh ~/Pictures/
Чтобы вывести размеры всех файлов и каталогов в текущем каталоге:
du -ah
Команда df выводит отчёт об использовании дискового пространства.
df -hT
Но гораздо легче и удобнее использовать утилиту ncdu написанную с использованием ncurses:




















5. iptraf
Пригодится, когда возникает необходимость в контроле за данными пересылаемыми через сетевой интерфейс или для просмотра статистики пo
соединениям.




















6. lsof (glsof)

Запустив эту утилиту без параметров, вы получите громадный список всех процессов системы и открытых ими файлов. Понятно, что эту кучу инфы надо как-то уменьшить в зависимости от того, что вы ищите.
Например, чтобы узнать какой процесс или процессы использует данный файл, нужно просто набрать:
lsof /var/log/messages.log
Вывести список открытых портов и процессов, которые эти порты используют:
lsof -i
Какие файлы в определённой папке используются в данный момент (пригодится если к примеру не можете отмонтировать флешку):
lsof +D /media/disk
Ну и напоследок, чтобы узнать, какие файлы читает нужный вам процесс:
lsof -c <процесс>
Под lsof есть и графическая обёртка glsof, про которую я совсем недавно узнал. (Хоть это к теме и не относится, но скрин выложу)











7. ccze

Лучше чем ccze для просмотра логов я пока ещё ничего не нашёл, да и искать незачем. О ней я писал в этом посте.

Интересно было бы услышать кто ещё что использует.

13 комментариев:

  1. Спасибо большое. Открыл для себя ncdu.

    ОтветитьУдалить
  2. я из перечисленного часто запускаю ps ax, или htop, чтобы потом сделать kill №№№ :)

    ОтветитьУдалить
  3. vmstat для мониторинга свопа, количества переключений контекста, утилизации процессора, характера нагрузки (io/cpu)
    pidstat для исследования дисковой нагрузки (какой процесс в каких объёмах) и памяти (swap, изменение rss) на каждый процесс
    mpstat для осознания, сколько тратится времени каждого процессора/ядра на irq и softirq
    iostat для исследования дисковой нагрузки (общесистемно)
    sar для сравнения нагрузок в течении дня/месяца (процесоры, память,своп)
    ifstat для просмотра утилизации полосы на каждом интерфейсе.

    ОтветитьУдалить
  4. ihanick, надеюсь всё это вы не на домашней машине проделываете?))

    ОтветитьУдалить
  5. atop - лучший из top'ов :)

    ОтветитьУдалить
  6. а я привык к старому доброму top, но atop обязательно попробую

    ОтветитьУдалить
  7. Добрый день. замечательная статья, спасибо огромное:-)... Интересный сайт хорошо описали

    ОтветитьУдалить
  8. По поводу использования ps для поимки pid'а процесса: почему бы не использовать pidof?
    А если не известно точное имя процесса - pgrep
    Ну так просто удобней делать так:
    kill -KILL `pidof java`
    Хотя и тут можно упростить: pkill -KILL java, killall -KILL java
    pgrep и pkill понимают wilcdcards и паттерны.

    ОтветитьУдалить
  9. спасибо за комментарии, я на самом деле и не знал за эти команды. Действительно очень удобно!

    ОтветитьУдалить