web-dev-qa-db-ja.com

高負荷が原因でサーバーがハングし、「120秒を超えてブロックされた」というエラーが発生する可能性がありますか?

現在、いくつかのVMと「ベアメタル」サーバーを実行しています。 Javaが高速度で実行されている-時々400%+以上。コンソールが「Java-120秒を超えてブロックされた」-kjournaldなどのエラーでランダムにハングする.

何らかの理由でこのエラーがコンソールにのみ書き込まれるため、dmesg出力を取得できません。これはリモートでホストされているため、アクセスできません。したがって、完全なトレースをコピーできません。

私はこれが置かれている環境を変更しました-物理サーバーでさえ、それはまだ起こっています。

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Technical_Notes/deployment.html のように、これが誤検知である場合は、hung_task_timeout_secsを0に変更しました。

また、irqbalanceがインストールされていません。おそらく役に立ちますか?

これはUbuntu 10.04 64ビットです。最新の2.6.38-15-serverおよび2.6.36でも同じ問題が発生します。

cPUまたはメモリの問題/スワップが残っていないことがこの問題の原因ですか?

ここにコンソールメッセージがあります:

[58Z?Z1.5?Z840] INFUI task Java:21547 blocked for more than 120 seconds.
[58Z?Z1.5?Z986] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z841.5?Z06Z] INFUI task kjournald:190 blocked for more than 120 seconds.
[58Z841.5?Z336] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z841.5?Z600] INFUI task flush-202:0:709 blocked for more than 120 seconds.
[58Z841.5?Z90?] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z841.5?3413] INFUI task Java:21547 blocked for more than 120 seconds.
[58Z841.5?368Z] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z961.5?ZZ36] INFUI task kjournald:60 blocked for more than 120 seconds.
[58Z961.5?Z6Z5] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
[58Z961.5?31ZZ] INFUI task flush-202:0:709 blocked for more than 120 seconds.
[58Z961.5?3393] "echo 0 > /proc/sgs/kernel/hung_task_timeout_secs" disables this
message.
17
Tee

はい、できます。

これが意味することはかなり明白です:カーネルは120秒間タスクをスケジュールできませんでした。これは、多くの場合ディスクアクセスに関連するリソース不足を示しています。

irqbalanceは役立つかもしれませんが、それは明白に聞こえません。 dmesgのこのメッセージの周囲、特にそれに続くスタックトレースを教えていただけますか?

さらに、これはnot誤検知です。これは、タスクがハングしたforeverであるとは言いません。ステートメントは完全に正しいです。これは問題があるという意味ではありません。ユーザーへの影響に気づかない場合は、無視するように決定できます。

これは次の原因で発生することはありません。

  • cPUの問題(または、非常にありそうもないハードウェア障害となる)
  • メモリの問題(おそらくハードウェア障害ですが、複数回発生することはありません。プロセスがoom-killedであるため、RAM)が不足しているわけではありません)、
  • スワップ不足(再びoom-killer)。

つまり、RAMでシステムからデータキャッシュを奪うと、より多くのI/Oが発生することになります。しかし、 "メモリ不足です。」.

15
Pierre Carrier
Sudo sysctl -w vm.dirty_ratio=10
Sudo sysctl -w vm.dirty_background_ratio=5

次に、変更をコミットします。

Sudo sysctl -p

私のためにそれを解決しました...

6
Nick

最近、本番クラスターの1つでこのエラーを経験しました。

11月11日14:56:41 xxxカーネル:INFO:タスクxfsalloc/3:2393が120秒以上ブロックされました。

11月11日14:56:41 Xxxxカーネル:汚染されていない2.6.32-504.8.1.el6.x86_64#1

11月11日14:56:41 xxx:「エコー0>/proc/sys/kernel/hung_task_timeout_secs」は、このメッセージを無効にします。

..

Sarログをさらに検証すると、IO待機が同時に増加しました。

また、ハードウェア(物理ディスク)をチェックすると、中程度のエラーが見られ、他のSCSIエラーが物理ディスクにログオンしていたため、割り当てるリソースが不足していたため、IOがブロックされていました。

11/11/15 19:52:40:終了したpRdm 607b8000フラグ= 0 TimeOutC = 0 RetryC = 0要求c1173100応答60e06040 iocStatus 0048 retryC 0 devId:3 devFlags = f1482005 iocLogInfo:31140000

11/11/15 19:52:40:DM_ProcessDevWaitQueue:プロセスdevId = xのタスク管理11/11/15 19:52:40:DM_ProcessDevWaitQueue:プロセスdevId = xのタスク管理

これは、クラスターでのハードウェアエラーが原因でした。

したがって、コアファイルを確認でき、さらにipmiユーティリティがそこにある場合は、ipmiutil/ipmitool sel elistコマンドを確認して問題を確認することをお勧めします。

よろしく、VT

2
Varun Thomas

クラウドプロバイダーの監視インターフェイスに移動して、ストレージに指定された最大IOpsを超えていないかどうかを確認できます。これにより、キャッシュデータのフラッシュに長い時間がかかった理由がわかります。
最大IOpsは、ストレージ属性ページで確認できます。

0
Emmanuel