Як перевірити використання вводу / виводу диска за процес


45

У мене виникають проблеми зі стійкою системою Linux, і я знайшов sysstat / sar, щоб повідомити про величезні піки використання вводу / виводу диска, середній час обслуговування, а також середній час очікування на час зупинки системи.

Як я міг би визначити, який процес викликає ці піки наступного разу?
Чи можливо це зробити з sar (тобто: чи можу я знайти цю інформацію з файлів sar, записаних у alreade?

Вихід для "sar -d", затримка системи сталася близько 12.58-13.01 вечора.

12:40:01          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:40:01       dev8-0     11.57      0.11    710.08     61.36      0.01      0.97      0.37      0.43
12:45:01       dev8-0     13.36      0.00    972.93     72.82      0.01      1.00      0.32      0.43
12:50:01       dev8-0     13.55      0.03    616.56     45.49      0.01      0.70      0.35      0.47
12:55:01       dev8-0     13.99      0.08    917.00     65.55      0.01      0.86      0.37      0.52
13:01:02       dev8-0      6.28      0.00    400.53     63.81      0.89    141.87    141.12     88.59
13:05:01       dev8-0     22.75      0.03    932.13     40.97      0.01      0.65      0.27      0.62
13:10:01       dev8-0     13.11      0.00    634.55     48.42      0.01      0.71      0.38      0.50

Це додаткове запитання до теми, яку я розпочав вчора: раптові піки завантаження та блоку диска чекають , я сподіваюся, що це нормально, що я створив нову тему / питання з цього питання, оскільки я ще не зміг вирішити проблему.


Здається, що проблема може бути менш конкретним процесом і більше спорадично невідповідним диском. Диски роблять такі речі, які на системному рівні виявляються скелями, на які потрапила система. Якщо ви не знайдете винуватців, тоді саме час дослідити дискову підсистему.
Slashdot



Використання htop serverfault.com/a/25034/373867
qwr

Відповіді:


46

Якщо вам пощастило скористатися наступним піковим періодом використання, ви можете вивчати статистику вводу / виводу за один процес інтерактивно, використовуючи iotop .


Гей, дякую! Ще одна іграшка для вундеркіндів, яку потрібно зберігати в моїй панелі інструментів. :-)
Janne Pikkarainen

Запуск iotop в пакетному режимі може бути дуже хорошим доповненням / заміною для рішення "ps -eo" вище. Дякую!
Авада Кедавра

2
Дивовижний, "iotop -n 1 -b -o" забезпечує саме той вихід, який мені потрібен. Дякую!
Авада Кедавра

виглядає так, що для запуску потрібен кореневий доступ до системи
user5359531

29

Ви можете використовувати pidstat для друку сукупної статистики io за процес кожні 20 секунд за допомогою цієї команди:

# pidstat -dl 20

Кожен рядок матиме наступні стовпці:

  • PID - ідентифікатор процесу
  • kB_rd / s - кількість кілобайт, яку завдання спричинило зчитування з диска за секунду.
  • kB_wr / s - кількість кілобайт, яке завдання спричинило або повинно записувати на диск за секунду.
  • kB_ccwr / s - кількість кілобайт, запис яких на диск було скасовано завданням. Це може статися, коли завдання обрізає деякі брудні сторінки сторінки. У цьому випадку деякий ІО, який було зараховано до іншого завдання, не відбуватиметься.
  • Команда - Назва команди завдання.

Вихід виглядає приблизно так:

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]              

10

Нічого не перемагає постійний моніторинг, ви просто не можете повернути дані, що залежать від часу, після події ...

Є кілька речей, які ви, можливо, зможете перевірити, щоб поширити чи усунути, - /procце ваш друг.

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

Поля 10, 11 - це накопичені письмові сектори та накопичений час (мс) запису. Це покаже ваші гарячі розділи файлової системи.

cut -d" " -f 1,2,42 /proc/*/stat | sort -n -k +3

Ці поля - це PID, командні та сукупні клітинки IO-wait. Це покаже ваші гарячі процеси, хоча лише якщо вони все ще запущені . (Напевно, ви хочете ігнорувати потоки файлової системи.

Корисність вищезазначеного залежить від часу роботи, характеру тривалих запущених процесів та способів використання вашої файлової системи.

Застереження: не застосовується до ядер, що передують 2.6, перевірте свою документацію, якщо не впевнені.

.


10

Використовуйте atop. ( http://www.atoptool.nl/ )

Запишіть дані в стислий файл, який atopможна прочитати пізніше в інтерактивному стилі. Робіть читання (дельта) кожні 10 секунд. зробіть це 1080 разів (3 години; тому, якщо ви забудете про нього, вихідний файл не вичерпає вас з диска):

$ atop -a -w historical_everything.atop 10 1080 &

Після того, як погане трапляється знову:

(навіть якщо він все ще працює у фоновому режимі, він просто додається кожні 10 секунд)

% atop -r historical_everything.atop

Оскільки ви сказали IO, я натиснув би 3 клавіші: tdD

t - move forward to the next data gathering (10 seconds)
d - show the disk io oriented information per process
D - sort the processes based on disk activity
T - go backwards 1 data point (10 seconds probably)
h - bring up help
b - jump to a time (nearest prior datapoint) - e.g. b12:00 - only jumps forward
1 - display per second instead of delta since last datapiont in the upper half of the display

4

Використовуйте btrace. Це просте у використанні, наприклад btrace /dev/sda. Якщо команда недоступна, вона, ймовірно, доступна в пакеті blktrace .

EDIT : Оскільки налагодження не включено в ядрі, ви можете спробувати date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtfабо подібне. Зрозуміння помилок сторінки - це, звичайно, не те саме, що використання btrace, але якщо вам пощастить, МОЖЕ дати вам підказку про найбільш голодні на диску процеси. Я просто спробував, що один з моїх найбільш інтенсивних серверів вводу / виводу та список включав процеси, які я знаю, що споживають багато вводу-виводу.


Привіт, Janne, ядро, на жаль, не компілюється з файловою системою налагодження, а його жива система, тому я не можу перекомпілювати ядро. Чи є інший спосіб зробити це без перекомпіляції?
Авада Кедавра

Гаразд, я трохи відредагував свою відповідь :)
Janne Pikkarainen

Чудово, зараз ми кудись потрапляємо! Я замислююся над тим, щоб поставити це в cronjob і виконати його одночасно з завданням sar cron. Потім наступного разу, коли сервер зупиняється, я повинен мати можливість порівняти швидкість помилок сторінки, щоб побачити, який процес / процеси має підвищену швидкість помилок сторінки. Я думаю, що я міг би не пощастити і побачити підвищення диска io для всіх процесів під час стійла, але його, безумовно, варто добре спробувати. Дякую Джанне! (я б проголосував за вашу відповідь, якби міг: S)
Avada Kedavra

Ласкаво просимо. Дайте мені знати, як це пройшло, це була просто творча спроба вирішення проблеми від мене. :-)
Janne Pikkarainen

Іотопний висновок простіше тлумачити, тому погано приймати це рішення. Я повернусь, щоб проголосувати за вашу відповідь, як тільки я заробив репутацію достатньо для цього. Дякую за твою підтримку!
Авада Кедавра
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.