Як знайти процес (и), які виконують вимикання машини


8

Сценарій: Раптом мій комп'ютер відчуває млявість. Миші рухаються, але вікна відкриваються, і т.д. uptime говорить, що навантаження становить 7,69 і піднімається.

Який найшвидший спосіб дізнатися, який процес (процеси) є причиною навантаження?

Тепер "top" та аналогічні інструменти - не відповідь, тому що вони або показують використання CPU або пам'яті, але не обидва одночасно. Те, що мені потрібно, є єдиною командою, яку я міг би вводити, як це відбувається - те, що зрозуміє будь-яку

Система намагається поміняти 8 Гб оперативної пам'яті на диск, оскільки процес X ...

або

Процес X шукає по всьому диску

або

процес X використовує 400% процесора "

Отже, що я шукаю, це iostat, htop / atop, а подібні інструменти зіткнулися з одним з таким виходом:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

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

Мій аргумент виглядає так: користувач помічає проблему. Причин може бути тисячі ... ну, майже :-) Користувач хоче знати джерело проблеми.

Нинішні рішення дають мені багато цифр, і мені потрібно знати, що означають ці цифри. Я шукаю мета-інструмент. 99% даних не мають відношення до проблеми. Отже, що інструмент повинен зробити, це шукати процеси, які мають певний ресурс і перераховують лише ті, що "з цим процесом потрібно багато процесорів, це створює багато IRQ, цей процес виділяє багато оперативної пам'яті (і він все ще зростає)".

Це буде порівняно короткий список. Це буде набагато простіше для когось нового для того, щоб знайти винуватця з цього списку, ніж з виходу, скажімо, htop що дає мені близько 5000 номерів, але вимагає мене скласти багатопотокові процеси себе (у мене є 50 рядків, які кажуть VIRT 2750M але тільки 16 ГБ оперативної пам'яті - машина повинна поміняти себе на смерть, але, звичайно, це неправильне тлумачення даних, які можуть відбутися швидко).


Я не розумію чому. Симптоми, які ви описуєте, не стосуються кошика для дисків (не впливають на мишу). Млявою мишкою є класичний процесор на повну потужність.
soandos

1
Це лише приклад. Будь ласка, візьміть його з солі. Уявіть собі, що ноб сидить перед комп'ютером, який нічого не знає. Як він найлегше дізнатися, що відбувається (тобто, не витрачаючи на півгодини гуглінг того, що дає висновок top засоби)
Aaron Digulla

Ви шукаєте еквівалент Linux менеджера завдань з gui і всім, або щось ще?
soandos

Я шукаю щось, що я запускаю, і в якому сказано: "Процес X - це вимикання машини".
Aaron Digulla

Відповіді:


2

Я повинен посміхнутися відповідям, тому що кожен сказав вам запустити інструмент X. Єдина проблема в тому, що те, що ви бачите, є переривчастим, не буде ніякого способу співвідносити що-небудь. Інструмент подібний sar може допомогти, якщо ви запустите його на досить високій частоті, але я б стверджував collectl ще краще.

Люблю sar , ви запускаєте його як демон, встановлюючи RPM і роблячи /etc/init.d/collectl start.

Тепер, коли ви бачите щось мляве, collectl -p /var/log/collectl/filename --top буде відтворювати дані і показуватиме вам найкращі процеси. Ви могли б також просто запустити collectl --top і побачити їх у реальному часі. BTW - все, що можна зробити в режимі реального часу, також можна відтворити.

Що стосується завантаження процесора, що робити, якщо ви отримуєте перевантаження переривання? collectl -sC не тільки показуватиме навантаження на окремі ЦП (або використовувати) -sc для середнього навантаження), це покаже, як вони витрачають свій час. Включати -j ( -scj ), і ви побачите кількість переривань / CPU. Використовуйте великі літери -J і ви побачите ТИПИ кожного переривання / CPU.

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

Є набагато більше перемикачів, ніж у мене є час для переліку, але ви можете перевірити це на SourceForge або просто Google.


Дякую; це не зовсім те, що я шукав, але принаймні це хороша відправна точка.
Aaron Digulla

Фантастичний інструмент! А на Ubuntu (принаймні з 12.04) потрібно просто встановити пакет - він автоматично запускає демон під встановлення і після перезавантаження :)
nealmcb

6

"top" працює досить добре, поки ви дивитеся на правильні цифри. Давайте подивимося:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Тепер, якщо система є повільною, тому що процесор зайнятий, він показує стовпці "us" і "sy" на рядку "Процесор (и):", що наближається до 100% разом.

Якщо це відбувається повільно через заміну, "Mem:" "free" показує дуже низькі значення, а "Swap:" "використовує" високі значення.

Якщо це повільно через I / O загалом, то "Cpu (s):" "wa" повідомляє, що час витрачається на очікування I / O.

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


+1 Але я більше шукаю інструмент, який робить цей аналіз для мене і друкує процес разом з деякою інформацією, що не так. Я не хочу зібрати це з "сирих" фігур. Що?
Aaron Digulla

1
Вибачте, але ви не можете вирішити такі проблеми, як повільність машини, не розуміючи на базовому рівні різницю між різними видами повільності. Якщо такі інструменти існують, я не знаю про них; швидше за все вам знадобиться здатний адміністратор комп'ютера / обслуговуючий хлопець.
Zds

Було б добре, якщо такий інструмент існує, тому що це, звичайно, можна визначити це автоматично: Якщо я можу сказати з виходу top, так само може і комп'ютер. Це не посмішка Мони Лізи, це просто хрускіт деяких цифр, щоб знайти "погані".
Aaron Digulla

2

Виходячи з використання 400%, я припускаю, що у вас є чотирьохядерний процесор. Ваша середня завантаженість майже вдвічі перевищує потужність і половина процесів чекає на процесор.

Спочатку, renice ваша оболонка до 0 або -10, щоб отримати більш чуйну систему, а потім використовувати htop знайти процес (и), що порушує, і слідувати цьому strace на даному процесі. Інші корисні інструменти:

  • vmsat
  • sar
  • iostat
  • pmap

1

М'яка миша також може бути пов'язана з занадто високим навантаженням на переривання, або USB-контролери дуже зайняті (припускаю, що це миша USB).


Будь-які інструменти, які говорять мені, який драйвер / компонент викликає високу IRQ навантаження?
Aaron Digulla

1

vmstat може допомогти вам у загальних рисах. Прикладом використання є:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Ви також можете запускати його кожні X секунд - просто додайте номер X після команди.

Редагувати: З урахуванням коментаря ... Напишіть наступне у файл і зробіть його виконуваним файлом. Він розповість вам про трьох перших процесах на машині.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Якщо ви хотіли б дізнатися, яка пам'ять відсутній, а не CPU, то прочитайте верхню сторінку man і змініть порядок відображення.


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