Go to main content
Oracle® Solaris 11.3 でのネットワークファイルシステムの管理

印刷ビューの終了

更新: 2016 年 11 月
 
 

NFS のトラブルシューティング用のコマンド

このセクションでは、NFS 問題をトラブルシューティングするために使用できるコマンドについて説明します。

nfsstat コマンド

このコマンドでは、NFS および RPC 接続に関する統計情報が表示されます。NFS サーバーおよびクライアント統計を表示するには、次の構文を使用します。

# nfsstat [ –cmnrsz ]

–c

クライアント側情報を表示します

–m

NFS マウントされた各ファイルシステムの統計を表示します

–n

クライアント側とサーバー側の両方の NFS 情報を表示します。

–r

RPC 統計を表示します

–s

サーバー側の情報を表示します

–z

統計をゼロに設定するように指定します

オプションを指定しない場合、–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 統計では、注目すべき接続は、setattrwritecreateremoverenamelinksymlinkmkdir、および rmdir です。NFS Version 3 と NFS Version 4 統計では、監視すべき値は commit です。ある NFS サーバーの commit レベルが、別のほぼ同等のサーバーと比較して高い場合は、NFS クライアントのメモリーが十分であることを確認してください。サーバーの commit 操作の数は、クライアントに利用可能なリソースがないときに増えます。

pstack コマンド

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 コマンド

rpcinfo コマンドは、システムで動作している RPC サービスに関する情報を生成します。RPC サービスに関する情報を表示するときは、次のコマンド構文を使用してください。

# rpcinfo [ –m | –s ] [ hostname ]

# rpcinfo [–T transport] hostname [ progname ]

# rpcinfo [ –t | –u ] [ hostname ] [ progname ]

–m

rpcbind 処理の統計テーブルを表示します

–s

登録されているすべての RPC プログラムを簡易リストで表示します

–T

特定のトランスポートまたはプロトコルを使用するサービスの情報を表示します

–t

TCP を使用する RPC プログラムを検索します

–u

UDP を使用する RPC プログラムを検索します

transport

サービスのトランスポートまたはプロトコルを指定します

hostname

サーバーのホスト名を指定します

progname

RPC プログラムの名前を指定します

使用可能なオプションの詳細は、rpcinfo(1M) のマニュアルページを参照してください。

hostname を指定しないと、ローカルホスト名が使用されます。progname に RPC プログラム番号を代入できますが、名前がより一般的に使用されます。NFS Version 3 ソフトウェアが実行していないシステムでは、–s オプションの代わりに –p オプションを使用できます。

    このコマンドを実行すると、次の項目を含むデータを生成することができます。

  • RPC プログラム番号

  • 特定プログラムのバージョン番号

  • 使用中のトランスポートプロトコル

  • RPC サービスの名前

  • RPC サービスの所有者

使用例 12  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 コマンドは、ネットワーク上のパケットを監視するために使用されます。snoop コマンドは、root ユーザーとして実行される必要があります。このコマンドは、NFS クライアントと NFS サーバーの両方で、ネットワークハードウェアが機能しているかどうかを確認する方法としてよく使用されます。

ネットワーク上のパケットを監視するときは、次のコマンド構文を使用してください。

# snoop [ -d device ] [ –o filename ] [ host hostname ]

–d device

ローカルネットワークのインタフェースを指定します

–o filename

受信したすべてのパケットを指定したファイルに保存します

hostname

特定のホストが送受信したパケットを表示します

–d device オプションは、複数のネットワークインタフェースを持つサーバーで役立ちます。ホストの設定以外にも、使用できる式が多数あります。コマンド正規表現を grep で組み合わせることでも、十分に使用できるデータを生成できます。使用可能なオプションの詳細は、snoop(1M) のマニュアルページを参照してください。

トラブルシューティングをする場合は、パケットの発信元と送信先のホストが正しいことを確認してください。また、エラーメッセージも調べてください。パケットをファイルに保存すると、データを簡単に参照することができます。

truss コマンド

truss コマンドを使用して、プロセスがハングアップしているかどうかを確認できます。truss コマンドは、プロセスの所有者によってまたは root で実行される必要があります。

プロセスがハングアップしているかどうかを確認するときは、次のコマンド構文を使用してください。

# truss [ -t syscall ] –p pid

–t syscall

追跡するシステムコールを選択します

–p pid

追跡するプロセスの PID を指定します

syscall は、追跡するシステムコールのコンマ区切りリストです。リストを ! 文字で開始すると、リストされたシステムコールがトレースから除外されます。使用可能なオプションの詳細は、truss(1) のマニュアルページを参照してください。

使用例 13  プロセスステータスを表示する
# /usr/bin/truss -p 243
poll(0x00024D50, 2, -1)         (sleeping...)

この例では、プロセスが別の接続要求を待機していることを示しています (正常な応答)。新規接続の要求が行われた後でも反応が変わらない場合、そのプロセスはハングアップしている可能性があります。

NFS サービスの再起動については、NFS サービスを再起動する方法を参照してください。ハングアッププロセスのトラブルシューティングについては、NFS トラブルシューティング手順を参照してください。