Przez ostatni tydzień miałem gwałtowny wzrost obciążenia. Zwykle dzieje się to raz lub dwa razy dziennie. Udało mi się ustalić z iotop, że [jbd2 / md1-8] używa 99,99% IO. W czasie dużego obciążenia nie ma dużego ruchu do serwera.
Specyfikacja serwera to:
- Rdzeń AMD Opteron 8
- 16 GB pamięci RAM
- 2x2.000 GB 7.200 RPM HDD Software Raid 1
- Cloudlinux + Cpanel
- MySQL jest odpowiednio dostrojony
Oprócz kolców obciążenie zwykle wynosi najwyżej około 0,80.
Szukałem w okolicy, ale nie mogę znaleźć, co dokładnie robi [jbd2 / md1-8]. Czy ktoś miał ten problem lub ktoś zna możliwe rozwiązanie?
Dziękuję Ci.
AKTUALIZACJA:
TIME TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
16:05:36 399 be/3 root 0.00 B/s 38.76 K/s 0.00 % 99.99 % [jbd2/md1-8]
iostat
? Czy możesz trochę uruchomić (powiedzmyiostat 5
) trochę i podzielić się wynikami?Odpowiedzi:
To nie jest tak naprawdę odpowiedź, ponieważ nie ma wystarczającego kontekstu, aby podać dokładną przyczynę, ale jest to opis tego, jak udało mi się to śledzić, kiedy mi się to przydarzyło.
Zauważyłem, że
jbd2/md0-8
ciągle pojawiałem się na górzeiotop
. Zajrzałem,/sys/kernel/debug/tracing/events/jbd2
żeby zobaczyć, jakie są opcje, aby ustalić, co sięjbd2
dzieje.UWAGA-1: Aby wyświetlić dane wyjściowe dla zdarzeń śledzenia debugowania
cat /sys/kernel/debug/tracing/trace_pipe
- miałem to uruchomione w terminalu podczas włączania / wyłączania śledzenia.UWAGA-2: Aby włączyć zdarzenia do śledzenia, użyj np
echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
. Aby wyłączyćecho 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
.Zacząłem od włączenia
/sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
- ale nie było w nim nic, co wydawałoby się szczególnie interesujące. Próbowałem śledzić kilka innych zdarzeń, a gdy włączyłem/sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enable
, zauważyłem, że następują one co sekundę:Wyglądało to tak, jakby było powiązane z
sync(2)
/fsync(2)
/msync(2)
, więc szukałem sposobu, aby połączyć to z procesem i znalazłem to:Po włączeniu zobaczyłem następujące dane wyjściowe:
To dało mi nazwę / identyfikator procesu - i po kilku debugowaniu tego procesu (
nzbget
) odkryłem, że robi tofsync(2)
co sekundę. Po zmianie konfiguracji (FlushQueue=no
myślę, że nieudokumentowane, znalazłem ją w źródle), aby powstrzymać się od robienia tego na sekundę,fsync(2)
problem zniknął.Moja wersja jądra to.
4.4.6-gentoo
Myślę, że były pewne opcje, które włączyłem (ręcznie lub za pomocąmake oldconfig
) w pewnym momencie konfiguracji jądra, aby uzyskać/sys/kernel/debug
te zdarzenia - więc jeśli nie masz, może po prostu rozejrzyj się po Internecie, aby uzyskać więcej informacji na temat włączania to.źródło
To wydaje się być związane z aktualizacją dziennika. Ile dysków składa się z oprogramowania RAID. Czy możesz mi pokazać polecenie użyte do jego utworzenia.
Czy możesz również wkleić dane wyjściowe dumpe2fs. Najpierw zidentyfikuj urządzenie fizyczne, w którym widzisz obciążenie. Użyj df, aby to wiedzieć. Następnie,
W twoim przypadku może to być / dev / md0.
Uruchom także to.
W momencie wysokiego problemu z IO.
Nie znam cloudlinux, ale jest dostępne narzędzie blktrace.
źródło