Hohe System-CPU-Auslastung (% sys), System sperrt

7

In den letzten zwei Wochen haben wir zeitweise starke Spitzen in der CPU-Auslastung des Systems (angezeigt als% sys), die etwa eine halbe Minute dauern und die meisten Prozesse, einschließlich ssh, blockieren.

Ich habe versucht, dies herauszufinden, aber oben zeigt nichts Relevantes an (die Systemnutzung für Prozesse, die angezeigt werden, ist unbedeutend), Spitzen treten nur sporadisch auf und ich konnte die Spitze mit keiner Arbeitslast für die von diesem Webserver gehostete Webanwendung reproduzieren.

Wenn Sie Ideen zum Debuggen von% sys und (manchmal)% si CPU-Auslastung haben, teilen Sie diese bitte mit.

Systemspezifikationen (ich weiß nicht, ob dies relevant ist): Dedizierter Server, CentOS 6, Core i7 950, jederzeit konsistenter 4 bis 8 GB RAM frei, Festplatten befinden sich in RAID-1.

Zusätzliche Information:

  • Die dmesg-Ausgabe ändert sich nicht zwischen den Spitzen
  • / var / log / messages ändert sich nicht zwischen Spitzen
  • Hier ist cat / proc / vmstat
  • Hier wird mpstat 1 während eines typischen Spikes ausgegeben

Add 07.11.11: Sieht aus wie ein einfacher Neustart, der den Systemstatus wiederherstellt, und wir werden möglicherweise nie wissen, was die Störung überhaupt verursacht hat.

Kennzeichen
quelle
Sie können einige Dateien ab dem Zeitpunkt auf eine Webseite stellen, an dem Sie diese hohe Last oder Sperren sehen : screenshot of top, dmesgund / oder /var/log/syslog, /proc/vmstat. Sie können vertrauliche Daten bei Bedarf vorher entfernen.
ott--
@ ott-- hat dem ersten Beitrag weitere Informationen hinzugefügt.
Mark
Anscheinend kann ich dem Beitrag keine weiteren Links hinzufügen, ohne als Spammer betrachtet zu werden. Hier wird iostat -x 5 während eines typischen Spikes ausgegeben .
Mark
Führen Sie ein BTRFS-Dateisystem unter Linux 3.0 aus?
Mailq
@mailq: Nein, Linux 2.6.32-71.29.1.el6.x86_64 #1 SMP Mon Jun 27 19:49:27 BST 2011 x86_64 x86_64 x86_64 GNU/LinuxDateisysteme sind alle ext3.
Mark

Antworten:

4

Ich weiß, dass dieser Thread wirklich alt ist und ich weiß, dass Sie sich dessen bereits bewusst sind,% sys -> Wenn der Zyklus in% system verbracht wird, erfolgt ein Großteil der Ausführung in Code niedrigerer Ebene, dh möglicherweise auf der Kernelseite. Wenn dieses Problem wieder reproduzierbar ist, sammeln Sie bitte die Ausgabe von:

echo t > /proc/sysrq-trigger

Überprüfen Sie die Systemmeldungen ( var/log/messagesoder /var/log/syslog), um festzustellen, ob ein Thread möglicherweise viel Zeit für die System-CPU benötigt.

Prashant Lakhera
quelle
1

Deaktivieren Sie unter Centos 6.2 und 6.3 die Unterstützung großer Seiten:

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
Andrija
quelle
6
Es wäre hilfreich zu erklären, was dies bewirkt und warum das Problem dadurch behoben wird.
Michael Hampton
0

Ein hoher% si würde eine hohe Interrupt-Rate bedeuten (si ist die Zeit, die in Softirq-Handlern, AFAIK, verbracht wird). Daher würde meine erste Vermutung sein, dass die Servernetzwerkschnittstelle gehämmert wird.

janneb
quelle
Wie kann ich diese Hypothese beweisen oder widerlegen? Es scheint nicht so, aber es könnte sein.
Mark
Dass% si der Zeit entspricht, die in Softirq-Handlern verbracht wird? Wenn Sie mir oder einer anderen Dokumentation, die Sie möglicherweise finden, nicht glauben, können Sie den Kernel-Quellcode lesen.
Janneb
Äh, nein, Hypothese, dass die Netzwerkschnittstelle gehämmert wird.
Mark
Ah, Sie können zB / proc / softirq überprüfen; Leider kenne ich kein Tool, das im Laufe der Zeit einzelne Softirqs anzeigt. Alternativ können Sie auch "dstat -ar --socket --tcp" ausführen, wenn Sie einen Spike erhalten, und die Ergebnisse veröffentlichen.
Janneb
vielen dank für dstat tool, es ist irgendwie cool. Leider ist es noch nicht klar, was Spikes verursacht, sehen Sie es selbst: pastie.org/pastes/2821888/text?key=yqtv1iulh9nyhgahod1eq
Mark
0

Es klingt dumm, aber ein Neustart hat geholfen und wir werden vielleicht nie wissen, was die Spitzen überhaupt verursacht hat.

Vielen Dank für die Antworten.

Kennzeichen
quelle
1
für die nächste sar -I XALL 1 | grep -v 0.00wird Ihnen sagen, welche Unterbrechungen diese weiche Systemzeit bekommen
Theist
-2

Es gibt viele Faktoren, die zur hohen prozentualen Systemauslastung beitragen, wie Anmeldung, Systemaufruf, Kontextwechsel (sowohl Thread als auch Prozedur), E / A und sogar Sockets-Daten, die vom Kernelmodus in den Benutzermodus kopiert werden. Ich schlage vor, Sie können sar, vmstat und iostat verwenden, um diese zu überprüfen. Darüber hinaus wäre es schön herauszufinden, welcher Prozess die hohe% sys-Nutzung beim Spike verursacht hat. gdb wäre in diesem Fall hilfreich. Finden Sie den Prozess heraus und verwenden Sie gdb, um ihn anzuhängen. Sie werden sehen, was in diesem Moment mit diesem Prozess los ist. Sie müssen nur beachten, dass für diesen Vorgang Debug-Informationen erforderlich sind, die in die Prozedur eingebettet sind .

user260649
quelle