Hohe Serverlast - [jbd2 / md1-8] mit 99,99% E / A.

11

Ich habe in der letzten Woche einen Lastanstieg gehabt. Dies geschieht normalerweise ein- oder zweimal täglich. Ich habe anhand von iotop festgestellt, dass [jbd2 / md1-8] 99,99% E / A verwendet. Während der hohen Ladezeiten gibt es keinen hohen Datenverkehr zum Server.

Serverspezifikationen sind:

  • AMD Opteron 8 Kern
  • 16 GB RAM
  • 2x2.000 GB 7.200 U / min HDD Software Raid 1
  • Cloudlinux + Cpanel
  • MySQL ist richtig eingestellt

Abgesehen von den Spitzen beträgt die Last normalerweise höchstens 0,80.

Ich habe mich umgesehen, kann aber nicht finden, was [jbd2 / md1-8] genau tut. Hat jemand dieses Problem gehabt oder kennt jemand eine mögliche Lösung?

Vielen Dank.

AKTUALISIEREN:

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]
Alex
quelle
1
en.wikipedia.org/wiki/Journaling_block_device & linux.die.net/man/4/md weisen darauf hin, dass dies mit Software-RAID zusammenhängt.
mbrownnyc
Danke für deine Antwort. Nach einigem Graben stellte ich fest, dass es mit dem Software-RAID zusammenhängt. Kennen Sie eine Lösung dafür? Das Seltsame, dass es erst vor einer Woche nach fast drei Monaten ohne Probleme passierte.
Alex
Wie haben Sie festgestellt, dass der IO 99,99% beträgt? Hast du benutzt iostat? Können Sie ein wenig davon (sagen wir iostat 5) ein wenig ausführen und die Ausgabe teilen?
Slm
Ich habe die Protokollierung für iotop aktiviert und das Protokoll nach dem Intervall durchsucht, in dem das Laden stattgefunden hat. Jetzt ist die Last niedrig, so dass es keinen Sinn macht, sie jetzt auszuführen, aber ich werde es tun, wenn es das nächste Mal auftritt. Danke für deine Antwort.
Alex
1
Ich bin gerade auf genau dieses Problem gestoßen. Was war Ihre endgültige Lösung?
Satanicpuppy

Antworten:

17

Dies ist keine wirkliche Antwort, da es nicht genügend Kontext gibt, um die genaue Ursache anzugeben, aber es ist eine Beschreibung, wie ich es geschafft habe, dies zu verfolgen, als es mir passiert ist.

Ich bemerkte, dass ich jbd2/md0-8immer wieder oben auftauchte iotop. Ich habe nachgesehen /sys/kernel/debug/tracing/events/jbd2, welche Optionen es gibt, um festzustellen, was jbd2gerade passiert.

HINWEIS-1: Um die Ausgabe für Debug-Ablaufverfolgungsereignisse anzuzeigen, wurde cat /sys/kernel/debug/tracing/trace_pipediese im Terminal ausgeführt, während Ablaufverfolgungen aktiviert / deaktiviert wurden.

HINWEIS-2: Um Ereignisse für die Ablaufverfolgung zu aktivieren, verwenden Sie z echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable. Deaktivieren echo 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable.

Ich begann mit dem Aktivieren /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable- aber es gab nichts, was in der Ausgabe dafür besonders interessant schien. Ich habe versucht, einige andere Ereignisse zu verfolgen, und als ich sie aktivierte, /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enablesah ich, dass sie jede Sekunde auftraten:

# cat /sys/kernel/debug/tracing/trace_pipe
...
jbd2/md0-8-2520  [004] .... 658660.216492: jbd2_commit_flushing: dev 9,0 transaction 32856413 sync 0
jbd2/md0-8-2520  [001] .... 658661.334900: jbd2_commit_flushing: dev 9,0 transaction 32856414 sync 0
jbd2/md0-8-2520  [001] .... 658661.394113: jbd2_commit_flushing: dev 9,0 transaction 32856415 sync 0

Dies sah so aus, als ob es mit sync(2)/ fsync(2)/ zusammenhängt msync(2), also suchte ich nach einer Möglichkeit, dies mit einem Prozess zu verknüpfen, und fand Folgendes:

# find /sys/kernel/debug/tracing/events/ | grep sync.*enable
...
/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable
...

Als ich es aktivierte, sah ich die folgende Ausgabe:

# cat /sys/kernel/debug/tracing/trace_pipe
...
      nzbget-17367 [002] .... 658693.222288: ext4_sync_file_enter: dev 9,0 ino 301924373 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [001] .... 658693.284080: jbd2_commit_flushing: dev 9,0 transaction 32856465 sync 0
      nzbget-17367 [000] .... 658693.334267: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658693.334275: jbd2_commit_flushing: dev 9,0 transaction 32856466 sync 0
      nzbget-17367 [001] .... 658694.369514: ext4_sync_file_enter: dev 9,0 ino 301924367 parent 301924357 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.414861: jbd2_commit_flushing: dev 9,0 transaction 32856467 sync 0
      nzbget-17367 [001] .... 658694.470872: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1 
  jbd2/md0-8-2520  [002] .... 658694.470880: jbd2_commit_flushing: dev 9,0 transaction 32856468 sync 0

Dies gab mir den Prozessnamen / die Prozess-ID - und nachdem ich diesen Prozess noch einmal debuggt hatte ( nzbget), stellte ich fest, dass er fsync(2)jede Sekunde ausgeführt wurde. Nachdem ich die Konfiguration geändert hatte ( FlushQueue=noundokumentiert, glaube ich, fand sie in der Quelle), um dies pro Sekunde zu verhindern, fsync(2)verschwand das Problem.

Meine Kernel-Version ist. 4.4.6-gentooIch glaube, es gab einige Optionen, die ich (entweder manuell oder mit make oldconfig) irgendwann in der Kernel-Konfiguration aktiviert habe , um /sys/kernel/debugdiese Ereignisse zu verarbeiten. Wenn Sie sie nicht haben, schauen Sie sich vielleicht im Internet um, um weitere Informationen zum Aktivieren zu erhalten es.

Iwan Aucamp
quelle
Nettes Schlafen. Das ist sehr hilfreich.
JDhildeb
Vielen Dank für die Detaillierung des gesamten Prozesses!
Astrojuanlu
1

Dies scheint eine Sache im Zusammenhang mit Journal-Updates zu sein. Aus wie vielen Festplatten besteht das Software-RAID? Können Sie mir den Befehl zeigen, mit dem es erstellt wurde?

Können Sie auch die Ausgabe von dumpe2fs einfügen? Identifizieren Sie zunächst das physische Gerät, auf dem die Last angezeigt wird. Verwenden Sie df, um dies zu wissen. Dann,

dumpe2fs /dev/sdaX > /tmp/dump

In Ihrem Fall könnte es / dev / md0 sein.

Führen Sie dies auch aus.

iostat -xdk 1 25

Zum Zeitpunkt der hohen IO-Ausgabe.

Ich kenne Cloudlinux nicht, aber ist das Tool blktrace darunter verfügbar.

Soham Chakraborty
quelle
Hallo Soham, danke für deine Antwort. Das Array enthält 2 Festplatten. Was dumpe2fs betrifft, können Sie mir bitte den vollständigen Befehl geben, den ich ausführen soll? Danke fürs Helfen.
Alex
Alex, hat die Antwort bearbeitet.
Soham Chakraborty
Vergessen Sie niemals, dass dies nicht einmal ein Mid-Performance-Setup von den Discs ist - "Slow as a Workstation" beschreibt es genauer.
TomTom