web-dev-qa-db-ja.com

NFSDプロセスが実際に行っていることを調べますか?

サーバーの1つでtopを表示すると、CPUを消費するnfsdプロセスがたくさんあります。

PID   USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
2769  root      20   0     0    0    0 R   20  0.0   2073:14 nfsd
2774  root      20   0     0    0    0 S   19  0.0   2058:44 nfsd
2767  root      20   0     0    0    0 S   18  0.0   2092:54 nfsd
2768  root      20   0     0    0    0 S   18  0.0   2076:56 nfsd
2771  root      20   0     0    0    0 S   17  0.0   2094:25 nfsd
2773  root      20   0     0    0    0 S   14  0.0   2091:34 nfsd
2772  root      20   0     0    0    0 S   14  0.0   2083:43 nfsd
2770  root      20   0     0    0    0 S   12  0.0   2077:59 nfsd

これらが実際に何をしているのかを知るにはどうすればよいですか?各PIDがアクセスしているファイルのリスト、またはその他の情報を確認できますか?

Ubuntu Server 12.04にいます。

nfsstatを試しましたが、実際に何が起こっているのかについて、あまり役立つ情報が得られません。

編集-コメント/回答に基づいて試行された追加のもの:

各PIDでlsof -p 2774を実行すると、次のようになります。

COMMAND  PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
nfsd    2774 root  cwd       DIR    8,1     4096    2 /
nfsd    2774 root  rtd       DIR    8,1     4096    2 /
nfsd    2774 root  txt   unknown                      /proc/2774/exe

これは、ファイルがアクセスされていないことを意味しますか?


strace -f -p 2774を使用してプロセスを表示しようとすると、次のエラーが発生します。

attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Could not attach to process.  If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf

tcpdump | grep nfsは、nfsを介して、2つのサーバー間で大量のアクティビティを示していますが、私が知る限り、そうすべきではありません。次のような多くのエントリ:

13:56:41.120020 IP 192.168.0.20.nfs > 192.168.0.21.729: Flags [.], ack 4282288820, win 32833, options [nop,nop,TS val 627282027 ecr 263985319,nop,nop,sack 3 {4282317780:4282319228}{4282297508:4282298956}{4282290268:4282291716}], len
1
BT643

この種の状況では、NFSトラフィックをキャプチャして(tcpdumpやWiresharkなどを使用して)、高負荷の特定の理由があるかどうかを確認するのに非常に役立つことがよくあります。

たとえば、次のようなものを使用できます。

tcpdump -w filename.cap "port 2049"

nFSトラフィック(ポート2049上)のみをキャプチャファイルに保存するには、Wiresharkを搭載したPCでそのファイルを開いて、より詳細に分析できます。前回同様の問題が発生したときは、一連の計算ジョブでした。ディスククォータを超えていた同じユーザーから、クライアント(18の異なるマシン)が何度も書き込みを試みていたため、古いNFSサーバーの負荷が非常に高くなりました。

2
Ale

あなたのためのツールのカップル:

  • lsofは、開いているファイルハンドルを表示します
  • iotopは、プロセスごとのI/O統計を最上位で表示します
  • nethogsは、プロセスごとのネットワークトラフィックを表示します
  • straceを使用すると、プロセスが何をしているかを確認できます
2

もう1つの便利なツールはstraceです。これは、プロセス(およびそのフォークされた子)が行っているすべてのシステムコール(ファイルアクセスなど)を表示します。例えば:

[root @ localhost〜] #strace -f -p 2770

(ただし、出力のロットを期待します)

0
Peter Faller