Наш сервер начал замедляться, поэтому я запустил на нем iostat.
iostat -dx 5
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 89.60 108.40 5.60 880.00 763.20 14.41 2.61 22.87 8.70 99.20
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Итак, я вижу, что sda одного диска полностью переполнена. Как узнать, какие именно процессы вызывают это? (или это подкачка на тот диск?)
Мне также нравится iotop
собирать может быть то, что вам нужно. Статистика ввода-вывода по процессам, среди прочего. collectl --top io
чтобы распечатать топ-список, отсортированный по использованию ввода-вывода, collectl -sZ
для собственного вывода collectl для подсистемы процессов. Добавление --procopts t
switch тоже покажет темы.
Как упоминал Ричард Солтс, IOTop предоставит вам пользовательский интерфейс с более подробной статистикой ввода-вывода, если у вас есть оконный менеджер и Python, используйте его. В любом случае, если ваше ядро его не поддерживает (2.6.20
или более поздняя версия - безопасная ставка), то ни одна программа не будет работать.
Было бы неплохо узнать, какой у вас дистрибутив, но вот что:
Вы можете увидеть, на каком диске находится ваш раздел подкачки, проверив «Linux swap / Solaris» в выводе «fdisk -l / dev / sda». Это покажет вам, есть ли в этом разделе своп.
Затем вы можете наблюдать за использованием подкачки с помощью vmstat, чтобы узнать, много ли подкачки выполняется вашим сервером.
К сожалению, ни один из iostat и связанных пакетов не работает в CentOS 5. Но я смог найти виновника медленного процесса, используя:
ps auxf | grep 'B'
Здесь показаны все процессы, ожидающие в режиме ожидания без прерывания, вызванные ожиданием ввода-вывода, поэтому, скорее всего, это процессы, выполняющие много операций ввода-вывода.
Это произошло благодаря этому ответу ServerFault: wa (Ожидание ввода-вывода) из верхней команды большое
Кроме того, для тех, кто задается вопросом, является ли ввод-вывод медленным из-за подкачки, взгляните на ваш главный вывод и посмотрите, что говорит сумма столбцов (свободные + кешированные). Или лучше использовать htop, который показывает это менее запутанно.
один вариант, который может сработать для вас, - если диск насыщается только пакетами, используйте collectl для захвата диска и обработки статистики. затем просмотрите данные, чтобы увидеть, когда диск насыщается, и «collectl -sZ -p filename», чтобы воспроизвести собранные вами данные процесса, и посмотрите, какие процессы находятся в состоянии RUN в это время. может работать, может и нет ... -марка
Попробуйте команду btrace (или blktrace)
iotop
отлично работает на CentOS 5.7 (2.6.18-274). Если вы используете более старое ядро, попробуйте dstat
вместо.
Установить rpmforge
репо:
rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
затем установите dstat
из rpmforge-extras
репо, чтобы получить более новую версию (0.7.2):
yum --enablerepo=rpmforge-extras install dstat
Чтобы просмотреть основные процессы, использующие ввод-вывод, вы можете использовать:
dstat -d --top-io --top-bio