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]
iostat
? Können Sie ein wenig davon (sagen wiriostat 5
) ein wenig ausführen und die Ausgabe teilen?Antworten:
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-8
immer wieder oben auftauchteiotop
. Ich habe nachgesehen/sys/kernel/debug/tracing/events/jbd2
, welche Optionen es gibt, um festzustellen, wasjbd2
gerade passiert.HINWEIS-1: Um die Ausgabe für Debug-Ablaufverfolgungsereignisse anzuzeigen, wurde
cat /sys/kernel/debug/tracing/trace_pipe
diese 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
. Deaktivierenecho 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/enable
sah ich, dass sie jede Sekunde auftraten:Dies sah so aus, als ob es mit
sync(2)
/fsync(2)
/ zusammenhängtmsync(2)
, also suchte ich nach einer Möglichkeit, dies mit einem Prozess zu verknüpfen, und fand Folgendes:Als ich es aktivierte, sah ich die folgende Ausgabe:
Dies gab mir den Prozessnamen / die Prozess-ID - und nachdem ich diesen Prozess noch einmal debuggt hatte (
nzbget
), stellte ich fest, dass erfsync(2)
jede Sekunde ausgeführt wurde. Nachdem ich die Konfiguration geändert hatte (FlushQueue=no
undokumentiert, 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-gentoo
Ich glaube, es gab einige Optionen, die ich (entweder manuell oder mitmake oldconfig
) irgendwann in der Kernel-Konfiguration aktiviert habe , um/sys/kernel/debug
diese Ereignisse zu verarbeiten. Wenn Sie sie nicht haben, schauen Sie sich vielleicht im Internet um, um weitere Informationen zum Aktivieren zu erhalten es.quelle
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,
In Ihrem Fall könnte es / dev / md0 sein.
Führen Sie dies auch aus.
Zum Zeitpunkt der hohen IO-Ausgabe.
Ich kenne Cloudlinux nicht, aber ist das Tool blktrace darunter verfügbar.
quelle