NFS サーバーが利用可能な場合でも、NFS READ または WRITE オペレーションが進行時にシステムを再起動するとハングする
Environment
- Red Hat Enterprise Linux 6 (NFS クライアント)
- カーネル 2.6.32-431.el6 および 2.6.32-358.32.3.el6 で報告されている
- おそらくその他のカーネルでも発生する
- Red Hat Enterprise Linux 5 (NFS クライアント)
- カーネル 2.6.18-400.1.1.el5 で報告されている
- すべての NFS サーバー
- 再起動時に NFS への IO が高い状況が発生するアプリケーション
- RHEL7 または Fedora20、ならびに kernel-3.16.0-rc7 では発生しない
Issue
- NFS マウントで I/O 発生時に NFS クライアントマシンを再起動するとハングします。
- RHEL5 または RHEL7 で同じテストを実施しても、再起動時にハングしませんでした。
- 'reboot' または 'halt' コマンドは
sync_filesystems
でハングします。 - サーバーの再起動またはシャットダウンは NFS サーバーが応答していないというメッセージを出力してハングします。
Resolution
- この問題に対処すると見なされている initscripts テストパッケージが利用できます。この問題は Bugzilla #1101546 (非公開) で対応しています。詳細は Red Hat グローバルサポートサービスまでご連絡ください。
回避策
- シャットダウンするためのスクリプト /etc/rc.d/rc0.d/K90network を削除します。
- 再起動するスクリプト /etc/rc.d/rc6.d/K90network を削除します。
Root Cause
- RHEL6 では、'reboot' コマンドは、ネットワークがダウンしているために実施できない、'sync' の完了を待っているためハングしています。RHEL7、および Fedora20 ならびに kernel-3.16.0-rc7 ではこの問題は発生しません。その他の設定では、ネットワークがなくなり、システムで進行中の NFS IO があったとしても、reboot コマンドはハングしません。
- NFS IO が存在している際の再起動時に RHEL6 がハングする理由については現在調査中です。
Diagnostic Steps
- kdump を設定し、シャットダウンのハング時に vmcore を取得します。
vmcore の解析
- vmcore を解析すると、flush が保留されており、またネットワークが利用できなくないことが分かります。
- ネットワークデバイスを確認し、ネットワークがダウンしていることを示す IP アドレスがないことを確認します。
crash> net
NET_DEVICE NAME IP ADDRESS(ES)
ffff887fe7090020 lo
ffff883fe4e26020 eth0
ffff883fe48a0020 eth1
ffff883fe4f20020 eth2
ffff883fe5d21020 eth3
ffff88bfe6600020 eth4
ffff88bfe4d80020 eth5
ffff88bfe6a00020 eth6
ffff88bfe6a80020 eth7
ffff88bfe78f0020 bond0
sync_filesystems
上で待っているバックトレースにおいてハングしている 'reboot' または 'halt' タスクを探します。
crash> ps | grep reboot
10479 1 25 ffff883fe2a53540 UN 0.0 14756 788 reboot
crash> bt 10479
PID:10479 TASK: ffff883fe2a53540 CPU:25 COMMAND:"reboot"
#0 [ffff883684c55bd8] schedule at ffffffff8150e7f2
#1 [ffff883684c55ca0] io_schedule at ffffffff8150efd3
#2 [ffff883684c55cc0] sync_page at ffffffff81119e6d
#3 [ffff883684c55cd0] __wait_on_bit at ffffffff8150f98f
#4 [ffff883684c55d20] wait_on_page_bit at ffffffff8111a0a3
#5 [ffff883684c55d80] wait_on_page_writeback_range at ffffffff8111a4cb
#6 [ffff883684c55e80] filemap_fdatawait at ffffffff8111a58f
#7 [ffff883684c55e90] sync_inodes_sb at ffffffff811ac214
#8 [ffff883684c55f20] __sync_filesystem at ffffffff811b2012
#9 [ffff883684c55f40] sync_filesystems at ffffffff811b2118
#10 [ffff883684c55f70] sys_sync at ffffffff811b21b1
#11 [ffff883684c55f80] system_call_fastpath at ffffffff8100b072
...
crash> ps | grep halt
23311 1 6 ffff880b7b6f8040 UN 0.0 14760 796 halt
crash> bt 23311
PID:23311 TASK: ffff880b7b6f8040 CPU:6 COMMAND:"halt"
#0 [ffff880b8ffafbd8] schedule at ffffffff81528bc0
#1 [ffff880b8ffafca0] io_schedule at ffffffff81529393
#2 [ffff880b8ffafcc0] sync_page at ffffffff8111f81d
#3 [ffff880b8ffafcd0] __wait_on_bit at ffffffff81529e5f
#4 [ffff880b8ffafd20] wait_on_page_bit at ffffffff8111fa53
#5 [ffff880b8ffafd80] wait_on_page_writeback_range at ffffffff8111fe7b
#6 [ffff880b8ffafe80] filemap_fdatawait at ffffffff8111ff3f
#7 [ffff880b8ffafe90] sync_inodes_sb at ffffffff811b5044
#8 [ffff880b8ffaff20] __sync_filesystem at ffffffff811bb6d2
#9 [ffff880b8ffaff40] sync_filesystems at ffffffff811bb7d8
#10 [ffff880b8ffaff70] sys_sync at ffffffff811bb871
- さらに、vmcore の発生時に、NFS の 'not responding" メッセージがログに存在するが、'nfs: server ... OK' メッセージがないか、または 'OK' メッセージが少なくても 1 つ足りません。これは、1 つの NFS オペレーションが NFS サーバーからの応答を受け取らなかったことを示しています。
crash> log | grep "nfs: server"
nfs: server nfsserver not responding, still trying
nfs: server nfsserver not responding, still trying
crash> log | grep 'nfs: server' | sort | uniq -c
2 nfs: server nfsserver not responding, still trying
crash>
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments