Das Problem
Gelegentlich INFO Nachrichten werden unter /var/log/messages protokolliert wie:
Apr 19 03:33:22 host kernel: INFO: task kjournald:2046 blocked for more than 120 seconds. Apr 19 03:33:22 host kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Apr 19 03:33:22 host kernel: kjournald D ffff810001004420 0 2046 49 2476 2044 (L-TLB) Apr 19 03:33:22 host kernel: ffff81013ce9fdd0 0000000000000046 0000000000000100 0000000000000000 Apr 19 03:33:22 host kernel: 0000000000000000 000000000000000a ffff81013c7d0820 ffffffff80309b60 Apr 19 03:33:22 host kernel: 001b51e0f255644a 0000000000000a88 ffff81013c7d0a08 0000000000000000 Apr 19 03:33:22 host kernel: Call Trace: Apr 19 03:33:22 host kernel: [] :jbd:journal_commit_transaction+0x16d/0x1066 Apr 19 03:33:22 host kernel: [] autoremove_wake_function+0x0/0x2e Apr 19 03:33:22 host kernel: [] try_to_del_timer_sync+0x7f/0x88 Apr 19 03:33:22 host kernel: [] :jbd:kjournald+0xc1/0x213 Apr 19 03:33:22 host kernel: [] autoremove_wake_function+0x0/0x2e Apr 19 03:33:22 host kernel: [] keventd_create_kthread+0x0/0xc4 Apr 19 03:33:23 host kernel: [] :jbd:kjournald+0x0/0x213 Apr 19 03:33:24 host kernel: [] keventd_create_kthread+0x0/0xc4 Apr 19 03:33:24 host kernel: [] kthread+0xfe/0x132 Apr 19 03:33:24 host kernel: [] child_rip+0xa/0x11 Apr 19 03:33:24 host kernel: [] keventd_create_kthread+0x0/0xc4 Apr 19 03:33:24 host kernel: [] kthread+0x0/0x132 Apr 19 03:33:24 host kernel: [] child_rip+0x0/0x11
Was sind diese Botschaften und welche Wirkung haben sie?
Die Lösung
Diese Nachricht bedeutet, dass sich der Prozess für 120 Sekunden im Zustand „D“ befindet. In diesem Beispiel hat kjournald über 120 Sekunden auf das Beenden von journal_commit_transaction() gewartet, höchstwahrscheinlich aufgrund der hohen E/A-Zahl einiger Prozesse, da das Journal-Commit eine atomare Funktion ist.
Im Allgemeinen könnte dies ignoriert werden, wenn die Nachrichten nicht so häufig in /var/log/messages protokolliert werden. Dies ist nur eine Information, die darauf hindeutet, dass der Prozess aus irgendwelchen Gründen hängen geblieben ist, was aufgrund von starker E/A, Speicher-/Netzwerktrennung/Verzögerung usw. auftreten könnte.
Nachdem wir diese Meldung gefunden haben, müssen wir also zuerst prüfen, ob diese häufig protokolliert wird, und als nächstes, ob zu diesem Zeitpunkt ein Netzwerk-/Speicherproblem aufgetreten ist.
Schlussfolgerung
Diese Meldungen bedeuten in der Regel, dass das System eine Festplatten- oder Speicherüberlastung aufweist und Prozesse nicht genügend verfügbare Ressourcen haben. Diese Meldungen dienen als Warnung, dass etwas möglicherweise nicht optimal funktioniert. Sie weisen nicht unbedingt auf ein ernsthaftes Problem hin und alle blockierten Prozesse sollten schließlich fortgesetzt werden, wenn das System wiederhergestellt ist. Sie können versuchen, die Ausgabe der folgenden Befehle während des Problems zu erfassen, wenn möglich:
# top -n 5 -b > /tmp/top.out # vmstat 1 50 > /tmp/vm.out # iostat -x 2 10 > /tmp/io.out # ps aux > /tmp/ps.out # ps auxH > /tmp/psh.out # sar -A > /tmp/sar.out # free > /tmp/free.out # lsof > /tmp/lsof.out
Diese Ausgaben können bei der Diagnose des Problems mit hängendem System oder der Ursache für die INFO-Meldung „Aufgabe für mehr als 120 Sekunden blockiert“ nützlich sein.