Jak znaleźć procesy, które blokują maszynę

10

Scenariusz: nagle mój komputer jest powolny. Porusza się myszką, ale otwieranie się okien trwa wieki itp., uptimeMówi, że obciążenie wynosi 7,69 i rośnie.

Jaki jest najszybszy sposób, aby dowiedzieć się, które procesy są przyczyną obciążenia?

Teraz „najlepsze” i podobne narzędzia nie są odpowiedzią, ponieważ pokazują zużycie procesora lub pamięci, ale nie oba jednocześnie. Potrzebuję tylko jednego polecenia, które mógłbym wpisać na bieżąco - coś, co rozwiąże którekolwiek z nich

System próbuje zamienić 8 GB pamięci RAM na dysk, ponieważ proces X ...

lub

proces X szuka na całym dysku

lub

proces X zużywa 400% procesora ”

Tak więc szukam iostat, htop / atop i podobnych narzędzi do jednego z takim wyjściem:

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

Nie chcę narzędzia, które podaje mi liczby, które mogę analizować, ale narzędzia, które mówi mi dokładnie, który proces powoduje bieżące obciążenie. Załóżmy, że użytkownik przed klawiaturą ledwo wie, jak napisać „proces”, ale użytkownik jest szybko przytłoczony, jeśli chodzi o „wielkość rezydenta”, „pamięć wirtualną” lub „cykl życia procesu”.

Mój argument brzmi następująco: użytkownik zauważa problem. Powodów może być tysiące ... no prawie :-) Użytkownik chce poznać źródło problemu.

Obecne rozwiązania dają mi wiele liczb i muszę wiedzieć, co one oznaczają. To, czego szukam, to narzędzie meta. 99% danych nie ma znaczenia dla problemu. Narzędzie powinno więc poszukać procesów, które pochłaniają niektóre zasoby, i wymienić tylko te wraz z „ten proces wymaga dużo procesora, powoduje wiele przerwań IRQ, proces ten alokuje dużo pamięci RAM (i wciąż rośnie)”.

To będzie stosunkowo krótka lista. O wiele łatwiej będzie zlokalizować winowajcę z tej listy niż z wyniku, powiedzmy, htopktóry daje mi około 5000 liczb, ale wymaga ode mnie samodzielnego złożenia procesów wielowątkowych (mam 50 wierszy, które mówią, VIRT 2750Male tylko 16 GB pamięci RAM - maszyna powinna zamienić się na śmierć, ale oczywiście jest to błędna interpretacja danych, która może się zdarzyć szybko).

Aaron Digulla
źródło
Nie rozumiem dlaczego. Symptomy, które opisujesz, nie są objawami śmieci na dysku (nie wpłyną na mysz). Sluggish mouse to klasyczny procesor o pełnej pojemności.
soandos,
1
To tylko przykład. Proszę weź to z odrobiną soli. Wyobraź sobie, że przed komputerem siedzi noob, który nic nie wie. Jak może najłatwiej dowiedzieć się, co się dzieje (tj. Nie spędzając pół godziny na wyszukiwaniu, co topoznacza wynik)
Aaron Digulla,
Szukasz linuksowego odpowiednika menedżera zadań z GUI i wszystkim, czy czymś innym?
soandos,
Szukam czegoś, co uruchamiam i na którym jest napisane: „Proces X blokuje maszynę”.
Aaron Digulla,

Odpowiedzi:

3

Muszę się uśmiechnąć z odpowiedzi, ponieważ każdy kazał ci uruchomić narzędzie X. Jedyny problem polega na tym, że jeśli to, co widzisz, jest przerywane, nie będzie możliwości skorelowania czegokolwiek. Narzędzie takie jak sar może pomóc, jeśli uruchomisz je z wystarczająco wysoką częstotliwością, ale twierdzę, że zbieranie jest jeszcze lepsze.

Podobnie jak sar , uruchamiasz go jako demon, instalując RPM i wykonując czynności /etc/init.d/collectl start.

Teraz, gdy zobaczysz coś powolnego, collectl -p /var/log/collectl/filename --topodtworzy dane i pokaże najlepsze procesy. Mógłbyś też po prostu biec collectl --topi zobaczyć je w czasie rzeczywistym. BTW - wszystko, co możesz zrobić w czasie rzeczywistym, możesz również odtwarzać.

Jeśli chodzi o obciążenie procesora, co jeśli jesteś przeciążony przerwaniami? collectl -sCpokaże nie tylko obciążenie poszczególnych procesorów (lub użycie -scdo średniego obciążenia), ale pokaże, jak spędzają czas. Włącz -j( -scj), a zobaczysz liczbę przerwań / procesora. Użyj wielkich liter, -Ja zobaczysz TYPY każdego przerwania / procesora.

Oczywiście, jeśli naprawdę lubisz vmstat, zawsze możesz odtwarzać kolekcjonowane dane --vmstati będą one wyświetlać dane historyczne w formacie vmstat.

Istnieje o wiele więcej przełączników, niż mam czas, aby wymienić, ale możesz to sprawdzić w SourceForge lub po prostu google.

Mark Seger
źródło
Dzięki; to nie jest dokładnie to, czego szukałem, ale przynajmniej to dobry punkt wyjścia.
Aaron Digulla
Fantastyczne narzędzie! A na Ubuntu (przynajmniej od 12.04) wystarczy zainstalować pakiet - uruchamia on demona automatycznie podczas instalacji, a następnie uruchamia się ponownie :)
nealmcb
6

„góra” działa dość dobrze, o ile spojrzysz na odpowiednie liczby. Zobaczmy:

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

Teraz, jeśli system jest wolny, ponieważ cały procesor jest zajęty, pokazuje się jako kolumny „us” i „sy” w wierszu „Cpu (s):” razem blisko 100%.

Jeśli jest powolny z powodu zamiany, „Mem:” „free” pokazuje bardzo niskie wartości, a „Swap:” „używane” wysokie wartości.

Jeśli jest powolny z powodu ogólnie we / wy , wówczas „Cpu (s):” „wa” informuje, że czas jest poświęcony na oczekiwanie we / wy.

Teraz, jeśli wiesz, że problemem są operacje we / wy, możesz użyć programów „iotop”, aby dowiedzieć się, które procesy tworzą najwięcej operacji we / wy.

Zds
źródło
+1 Ale bardziej szukam narzędzia, które wykonuje tę analizę i drukuje proces wraz z pewnymi informacjami o tym, co jest nie tak. Nie chcę tego zbierać z „surowych” postaci. Byle co?
Aaron Digulla,
1
Przykro mi, ale nie można rozwiązać problemów takich jak powolność maszyny bez zrozumienia na poziomie podstawowym różnicy między różnymi rodzajami powolności. Jeśli takie narzędzia istnieją, nie wiem o nich; najprawdopodobniej potrzebujesz sprawnego administratora / serwisanta komputerów.
Zds,
Byłoby miło, gdyby takie narzędzie istniało, ponieważ z pewnością można to ustalić automatycznie: jeśli mogę to stwierdzić na podstawie danych wyjściowych top, to także komputer. To nie jest uśmiech Mony Lisy, tylko chrupanie niektórych liczb, aby znaleźć „złe”.
Aaron Digulla
2

Biorąc pod uwagę wykorzystanie 400%, założę, że masz czterordzeniowy procesor. Twoja średnia obciążenia jest prawie dwukrotnie większa niż pojemność, a połowa procesów czeka na procesor.

Najpierw renicetwoja powłoka na 0 lub -10, aby uzyskać bardziej responsywny system, a następnie użyj, htopaby znaleźć obrażające się procesy i postępować zgodnie z tym stracena danym procesie. Inne przydatne narzędzia to:

  • vmsat
  • sar
  • iostat
  • pmap
Terpion
źródło
1

Powolna mysz może być również spowodowana zbyt dużym obciążeniem przerwania lub kontrolerami USB bardzo obciążonymi (zakładam, że to mysz USB).

Bruce ONeel
źródło
Jakieś narzędzia, które mówią mi, który sterownik / komponent powoduje wysokie obciążenie IRQ?
Aaron Digulla,
1

vmstat może ci pomóc ogólnie. Przykładem zastosowania jest:

$ 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

Możesz go również uruchamiać co X sekund - po prostu dodaj liczbę X po poleceniu.

Edycja: W związku z komentarzem ... Zapisz w pliku następujące informacje i wykonaj ten plik jako wykonywalny. Powie ci 3 najlepsze procesy na maszynie.

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

Jeśli chcesz wiedzieć, która pamięć jest zablokowana, a nie CPU, przeczytaj stronę podręcznika głównego i zmień kolejność wyświetlania.

Sardathrion - przeciw nadużyciom SE
źródło
Szukam czegoś na wyższym poziomie. Powinien uruchomić vmstat i przeanalizować dla mnie liczby, więc nie muszę wiedzieć, co oznacza „cs” i czy duże „cs” jest „dobre” czy „złe”.
Aaron Digulla,