Pytanie Jak mogę zarejestrować, który proces lub aktywność jądra używa dysku w systemie GNU / Linux?


Na konkretnym serwerze Debian, iostat (i podobne) zgłasza nieoczekiwanie wysoki poziom (w bajtach) zapisu na dysku. Mam problem z ustaleniem, który proces wykonuje te zapisy.

Dwa interesujące punkty:

  1. Próbowałem wyłączyć usługi systemowe pojedynczo, bez skutku. Aktywność dysku pozostaje dość stała i nieoczekiwanie wysoka.

  2. Pomimo pisania nie wydaje się, że zajmuje więcej miejsca na dysku.

Oba sprawiają, że myślę, że pismo może być czymś, co robi jądro, ale ja się nie wymieniam, więc nie jest dla mnie jasne, co Linux może spróbować napisać.

Można wypróbować na szczycie:

http://www.atcomputing.nl/Tools/atop/

ale chciałbym uniknąć łatania mojego jądra.

Jakieś pomysły, jak to wyśledzić?


14
2017-10-30 08:25


pochodzenie




Odpowiedzi:


iotop jest dobry (wspaniale, faktycznie).

Jeśli masz jądro sprzed 2.6.20, nie możesz użyć większości z tych narzędzi.

Zamiast tego możesz wypróbować następujące rzeczy (które powinny działać dla prawie każdego IIRC jądra 2.6):

    
sudo -s
dmesg -c
/etc/init.d/klogd stop
echo 1> / proc / sys / vm / block_dump
rm / tmp / disklog
obejrzyj "dmesg -c >> / tmp / disklog"
   CTRL-C po zakończeniu zbierania danych
echo 0> / proc / sys / vm / block_dump
/etc/init.d/klogd start
exit (zamknij powłokę root)

cat / tmp / disklog | awk -F "[() \ t]" '/ (READ | WRITE | dirtied) / {activity [$ 1] ++} END {for (x in activity) print x, activity [x]}' | sort -nr -k2

Wiersze dmesg -c wyczyszczają dziennik jądra. Logger jest następnie wyłączany, ręcznie (za pomocą zegarka) zrzucany na dysk (bufor pamięci jest mały, dlatego musimy to zrobić). Pozwól mu działać przez około pięć minut, a następnie naciśnij CTRL-c na proces oglądania. Po wyłączeniu rejestrowania i ponownym uruchomieniu klogd, przeanalizuj wyniki za pomocą odrobiny awk na końcu.


16
2018-01-08 08:03



Każdy powód, dla którego root nie byłby w stanie wykonać 'echo 1> / proc / sys / vm / block_dump' z następującym błędem "bash: echo: write error: Operation not allowed"? To jest zwirtualizowane środowisko, więc domyślam się, że dlatego ... :( - Robert Swisher
Nigdy nie próbowałem na zwirtualizowanym systemie. Jeśli używasz sudo, pamiętaj, że nie możesz po prostu wykonać sudo echo 1> / proc / sys / vm / block_dump, ponieważ tylko echo jest sudoed, a nie przekierowanie. Będziesz musiał wykonać sudo bash -c "echo 1> / proc / sys / vm / block_dump" - Mikeage


Jeśli używasz jądra nowszego niż 2.6.20, to jest bardzo proste, ponieważ jest to pierwsza wersja jądra systemu Linux, która obejmuje operacje rozliczeń we / wy. Jeśli kompilujesz własne jądro, pamiętaj o:

CONFIG_TASKSTATS=y
CONFIG_TASK_IO_ACCOUNTING=y

Jądra pakietów Debiana zawierają już te flagi, więc nie ma potrzeby rekompilacji jądra. Standardowym narzędziem dostępu do danych księgowych I / O w czasie rzeczywistym jest iotop (1). Daje pełną listę procesów zarządzanych przez program planujący we / wy i wyświetla statystyki procesów dla odczytu, zapisu i całkowitej wykorzystanej przepustowości we / wy.


3
2017-12-27 20:17





Możesz chcieć zbadać iotop dla systemu Linux. Istnieje kilka wersji Solaris, ale jest na przykład pakiet Debiana.


2
2017-10-30 12:39





Możesz użyć polecenia UNIX lsof (lista otwartych plików). To wypisuje proces, identyfikator procesu, użytkownika dla dowolnego otwartego pliku.


1
2017-10-30 08:42





Możesz również użyć htop, umożliwiając kolumnę IO_RATR. Htop to doskonały top zamiennik.


1
2018-06-21 10:05





Iosnoop Brendana Gregga skrypt może (heurystycznie) powiedzieć ci o używaniu dysku na najnowszych jądrach (przykładowy wynik iosnoopa).


1
2017-08-03 07:59





Możesz spróbować użyć SystemTap , ma wiele przykładów, a jeśli się nie mylę, pokazuje, jak robić tego rodzaju rzeczy.


0
2017-10-30 08:28





Niedawno słyszałem o Mortadelo, klonie Filemona, ale jeszcze tego nie sprawdziłem:

http://gitorious.org/mortadelo


0
2018-02-17 00:59