このセクションでは、NFS 問題をトラブルシューティングするために使用できるコマンドについて説明します。
このコマンドでは、NFS および RPC 接続に関する統計情報が表示されます。NFS サーバーおよびクライアント統計を表示するには、次の構文を使用します。
# nfsstat [ –cmnrsz ]
クライアント側情報を表示します
NFS マウントされた各ファイルシステムの統計を表示します
クライアント側とサーバー側の両方の NFS 情報を表示します。
RPC 統計を表示します
サーバー側の情報を表示します
統計をゼロに設定するように指定します
オプションを指定しない場合、–cnrs オプションが使用されます。
新しいソフトウェアやハードウェアを処理環境に追加した場合、サーバー側の統計を収集することが、デバッグにたいへん役立ちます。このコマンドを週に最低 1 度は実行し、履歴を作成するようにしてください。統計を保存しておくと、以前のパフォーマンスの有効な記録となります。
使用例 10 NFS サーバー統計を表示する# nfsstat -s Server rpc: Connection oriented: calls badcalls nullrecv badlen xdrcall dupchecks dupreqs 719949194 0 0 0 0 58478624 33 Connectionless: calls badcalls nullrecv badlen xdrcall dupchecks dupreqs 73753609 0 0 0 0 987278 7254 Server NFSv2: calls badcalls referrals referlinks 25733 0 0 0 Server NFSv3: calls badcalls referrals referlinks 132880073 0 0 0 Server NFSv4: calls badcalls referrals referlinks 488884996 4 0 0 Version 2: (746607 calls) null getattr setattr root lookup readlink read 883 0% 60 0% 45 0% 0 0% 177446 23% 1489 0% 537366 71% wrcache write create remove rename link symlink 0 0% 1105 0% 47 0% 59 0% 28 0% 10 0% 9 0% mkdir rmdir readdir statfs 26 0% 0 0% 27926 3% 108 0% Version 3: (728863853 calls) null getattr setattr lookup access 1365467 0% 496667075 68% 8864191 1% 66510206 9% 19131659 2% readlink read write create mkdir 414705 0% 80123469 10% 18740690 2% 4135195 0% 327059 0% symlink mknod remove rmdir rename 101415 0% 9605 0% 6533288 0% 111810 0% 366267 0% link readdir readdirplus fsstat fsinfo 2572965 0% 519346 0% 2726631 0% 13320640 1% 60161 0% pathconf commit 13181 0% 6248828 0% Version 4: (54871870 calls) null compound 266963 0% 54604907 99% Version 4: (167573814 operations) reserved access close commit 0 0% 2663957 1% 2692328 1% 1166001 0% create delegpurge delegreturn getattr 167423 0% 0 0% 1802019 1% 26405254 15% getfh link lock lockt 11534581 6% 113212 0% 207723 0% 265 0% locku lookup lookupp nverify 230430 0% 11059722 6% 423514 0% 21386866 12% open openattr open_confirm open_downgrade 2835459 1% 4138 0% 18959 0% 3106 0% putfh putpubfh putrootfh read 52606920 31% 0 0% 35776 0% 4325432 2% readdir readlink remove rename 606651 0% 38043 0% 560797 0% 248990 0% renew restorefh savefh secinfo 2330092 1% 8711358 5% 11639329 6% 19384 0% setattr setclientid setclientid_confirm verify 453126 0% 16349 0% 16356 0% 2484 0% write release_lockowner illegal 3247770 1% 0 0% 0 0% Server nfs_acl: Version 2: (694979 calls) null getacl setacl getattr access getxattrdir 0 0% 42358 6% 0 0% 584553 84% 68068 9% 0 0% Version 3: (2465011 calls) null getacl setacl getxattrdir 0 0% 1293312 52% 1131 0% 1170568 47%
この例では、RPC および NFS アクティビティーの統計を表示する方法を示します。どちらの統計でも、badcalls または calls の平均値、および各週の calls の数がわかるので、問題を特定するのに役立ちます。badcalls 値は、クライアントからの悪いメッセージの数を報告します。この値は、ネットワークのハードウェアに問題が発生したことを示す場合があります。
いくつかの接続では、ディスクに対する書き込みアクティビティーが発生します。この数値の急激な上昇は障害の可能性を示すものなので、調査が必要です。NFS Version 2 統計では、注目すべき接続は、setattr、write、create、remove、rename、link、symlink、mkdir、および rmdir です。NFS Version 3 と NFS Version 4 統計では、監視すべき値は commit です。ある NFS サーバーの commit レベルが、別のほぼ同等のサーバーと比較して高い場合は、NFS クライアントのメモリーが十分であることを確認してください。サーバーの commit 操作の数は、クライアントに利用可能なリソースがないときに増えます。
pstack コマンドでは、各プロセスのスタックトレースが表示されます。pstack コマンドは、プロセスの所有者によってまたは root で実行される必要があります。pstack コマンドを使用してプロセスがハングアップした場所を判断できます。このコマンドで許可されるオプションは、確認するプロセスのプロセス ID だけです。pstack コマンドの詳細は、proc(1) のマニュアルページを参照してください。
使用例 11 NFS プロセスのスタックトレースを表示する# /usr/bin/pgrep nfsd 243 # /usr/bin/pstack 243 243: /usr/lib/nfs/nfsd -a 16 ef675c04 poll (24d50, 2, ffffffff) 000115dc ???????? (24000, 132c4, 276d8, 1329c, 276d8, 0) 00011390 main (3, efffff14, 0, 0, ffffffff, 400) + 3c8 00010fb0 _start (0, 0, 0, 0, 0, 0) + 5c
この例では、プロセスが新規の接続要求を持っていることが示されています。これは正常な反応です。要求が行われた後でもプロセスがポーリングしていることがスタックからわかった場合、そのプロセスはハングアップしている可能性があります。ハングアッププロセスの修復に関する詳細は、NFS サービスを再起動する方法を参照してください。NFS のトラブルシューティングの詳細は、NFS トラブルシューティング手順 を参照してください。
rpcinfo コマンドは、システムで動作している RPC サービスに関する情報を生成します。RPC サービスに関する情報を表示するときは、次のコマンド構文を使用してください。
# rpcinfo [ –m | –s ] [ hostname ]
# rpcinfo [–T transport] hostname [ progname ]
# rpcinfo [ –t | –u ] [ hostname ] [ progname ]
rpcbind 処理の統計テーブルを表示します
登録されているすべての RPC プログラムを簡易リストで表示します
特定のトランスポートまたはプロトコルを使用するサービスの情報を表示します
TCP を使用する RPC プログラムを検索します
UDP を使用する RPC プログラムを検索します
サービスのトランスポートまたはプロトコルを指定します
サーバーのホスト名を指定します
RPC プログラムの名前を指定します
使用可能なオプションの詳細は、rpcinfo(1M) のマニュアルページを参照してください。
hostname を指定しないと、ローカルホスト名が使用されます。progname に RPC プログラム番号を代入できますが、名前がより一般的に使用されます。NFS Version 3 ソフトウェアが実行していないシステムでは、–s オプションの代わりに –p オプションを使用できます。
このコマンドを実行すると、次の項目を含むデータを生成することができます。
RPC プログラム番号
特定プログラムのバージョン番号
使用中のトランスポートプロトコル
RPC サービスの名前
RPC サービスの所有者
# rpcinfo -s bee |sort -n program version(s) netid(s) service owner 100000 2,3,4 udp6,tcp6,udp,tcp,ticlts,ticotsord,ticots portmapper superuser 100001 4,3,2 udp6,udp,ticlts rstatd superuser 100003 4,3,2 tcp,udp,tcp6,udp6 nfs 1 100005 3,2,1 ticots,ticotsord,tcp,tcp6,ticlts,udp,udp6 mountd superuser 100007 1,2,3 ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 ypbind 1 100011 1 udp6,udp,ticlts rquotad superuser 100021 4,3,2,1 tcp,udp,tcp6,udp6 nlockmgr 1 100024 1 ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 status superuser 100068 5,4,3,2 ticlts - superuser 100083 1 ticotsord - superuser 100133 1 ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 - superuser 100134 1 ticotsord - superuser 100155 1 ticotsord smserverd superuser 100169 1 ticots,ticotsord,ticlts - superuser 100227 3,2 tcp,udp,tcp6,udp6 nfs_acl 1 100234 1 ticotsord - superuser 390113 1 tcp - superuser 390435 1 tcp - superuser 390436 1 tcp - superuser 1073741824 1 tcp,tcp6 - 1
次の例では、サーバーで実行中の RPC サービスに関する情報を表示します。このコマンドによって生成される出力は、情報を読みやすくするために、sort コマンドによってプログラム番号でフィルタされます。この例では、RPC サービスの数行を省略しています。
サーバー上で特定のトランスポートを選択することで、特定の RPC サービスについての情報を収集できます。次の例では、TCP 経由で実行中の mountd サービスを確認します。
# rpcinfo -t bee mountd program 100005 Version 1 ready and waiting program 100005 Version 2 ready and waiting program 100005 Version 3 ready and waiting
次の例では、UDP 経由で実行中の NFS サービスを確認します。
# rpcinfo -u bee nfs program 100003 Version 2 ready and waiting program 100003 Version 3 ready and waiting
snoop コマンドは、ネットワーク上のパケットを監視するために使用されます。snoop コマンドは、root ユーザーとして実行される必要があります。このコマンドは、NFS クライアントと NFS サーバーの両方で、ネットワークハードウェアが機能しているかどうかを確認する方法としてよく使用されます。
ネットワーク上のパケットを監視するときは、次のコマンド構文を使用してください。
# snoop [ -d device ] [ –o filename ] [ host hostname ]
ローカルネットワークのインタフェースを指定します
受信したすべてのパケットを指定したファイルに保存します
特定のホストが送受信したパケットを表示します
–d device オプションは、複数のネットワークインタフェースを持つサーバーで役立ちます。ホストの設定以外にも、使用できる式が多数あります。コマンド正規表現を grep で組み合わせることでも、十分に使用できるデータを生成できます。使用可能なオプションの詳細は、snoop(1M) のマニュアルページを参照してください。
トラブルシューティングをする場合は、パケットの発信元と送信先のホストが正しいことを確認してください。また、エラーメッセージも調べてください。パケットをファイルに保存すると、データを簡単に参照することができます。
truss コマンドを使用して、プロセスがハングアップしているかどうかを確認できます。truss コマンドは、プロセスの所有者によってまたは root で実行される必要があります。
プロセスがハングアップしているかどうかを確認するときは、次のコマンド構文を使用してください。
# truss [ -t syscall ] –p pid
追跡するシステムコールを選択します
追跡するプロセスの PID を指定します
syscall は、追跡するシステムコールのコンマ区切りリストです。リストを ! 文字で開始すると、リストされたシステムコールがトレースから除外されます。使用可能なオプションの詳細は、truss(1) のマニュアルページを参照してください。
使用例 13 プロセスステータスを表示する# /usr/bin/truss -p 243 poll(0x00024D50, 2, -1) (sleeping...)
この例では、プロセスが別の接続要求を待機していることを示しています (正常な応答)。新規接続の要求が行われた後でも反応が変わらない場合、そのプロセスはハングアップしている可能性があります。
NFS サービスの再起動については、NFS サービスを再起動する方法を参照してください。ハングアッププロセスのトラブルシューティングについては、NFS トラブルシューティング手順を参照してください。