web-dev-qa-db-ja.com

Linux NFSサーバーのパフォーマンスの分析

NFSサーバーを分析して、アプリケーションの潜在的なボトルネックを追跡できるようにしたいと思います。サーバーはSUSE Enterprise Linux 10を実行しています。

私が知りたいことの種類は次のとおりです。

  • どのクライアントがどのファイルにアクセスしているか
  • クライアントごとの読み取り/書き込みスループット
  • 他のRPC呼び出しによって課せられるオーバーヘッド
  • クライアントにサービスを提供するために他のNFS要求またはディスクI/Oを待機するのに費やした時間

私はすでに/proc/net/rpc/nfsdで利用可能な統計について知っており、実際に ブログ投稿 を作成してそれらを詳細に説明しています。私が探しているのは、特定のクライアントのパフォーマンスにどのような要因が影響しているのかをより深く掘り下げて理解するのに役立つ方法です。クラスタ上のアプリケーションのパフォーマンスにおけるNFSサーバーの役割を分析して、最適化する方法を考えたいと思います。

22
Kamil Kisiel

collectl (特にその NFSサブシステム )は、分析に役立つ可能性がある非常に優れたユーティリティですが、ではありません要件リストと一致します。私はそれを行うLinuxユーティリティを知りません。

(このトピック外のメモを追加させてください:要件に一致するisソフトウェアがあります:SunのDTraceベース Analytics(pdf) -残念ながらLinuxでは利用できません。このツールの機能を示す優れた例が Brendan Greggのブログ に多数あります。

2
knweiss

1つで利用可能なすべての* statユーティリティについて言わなければなりません。nfsstatは群を抜いて最悪です!たくさんのカウンターを見ることができますが、それだけです。それらを2回見ると、各カウンターがどれだけ変化したかを把握する作業を行う必要があり、変化率を知りたい場合は、サンプル間の秒数で除算する必要があります。公平に言うと、nfsstatは何年も前から物事がかなり粗雑であり、おそらく多くのことを壊してしまうため、出力形式を変更したくない人によって妨げられています。

Collectlを使用してnfsを監視することに関しては、nfsstatの出力をはるかに読みやすい形式で提供しますが、何時間または何日も実行してバックグラウンドで収集したデータを再生できるのはさらに良いことです。どのプロセスが実行しているかを確認するリクエストについては、collectlは、各プロセスが実行しているI/Oの量などのプロセスデータを収集し、再生して上位のI/Oユーザーを表示することもできます。トップ機能をリアルタイムで使用することもできます。

ディスクのテーマを自分で見たい場合は、collectlもそれを行い、すべてを調整されたディスプレイに表示できます。

それをチェックしてください...-マーク

2
Mark Seger

ちょうどアイデア、wiresharkでnfsトラフィックをスニッフィングしてみてください。どのユーザーがどのファイルにアクセスしたかがわかる場合があります。

tshark -R nfs -i eth0
2
ko-dos

現在のところ、これ以上の答えはありませんが、ディスクIO

iostat -mx <delay in sec.> <devices>

特に、IOの平均キューサイズと待機時間(ミリ秒単位)が非常に役立ちます。ディスクがボトルネックである場合、およびボトルネックがIOカウントまたはスループットである場合は、非常にすぐにわかります。

次に

netstat -plaute | grep nfs

クライアント接続と各クライアントから転送されたバイトがリアルタイムで表示されます。連続データの場合はループします。継続的なデータを提供するスクリプトを作成するのは非常に簡単です...私はそれに取り組んでいます:)

ここでIO)を取得するには、優れた iotop を使用できますが、nfsdプロセスをクライアントと一致させる方法を見つける必要があります。

どのクライアントがどのファイルにアクセスしているかについては、行き詰まっています。実際、NFSクライアントから現在読み書きされているファイルは、lsof出力にも表示されません。

Netstatを展開するには、watch -dを使用して、状況がどのように変化するかを確認し、ホストで並べ替えます。

watch -d "netstat -plaute | grep nfs | sort -k 4,5"
1
wazoox

私の意見では、これはまさに今日のツールの問題を浮き彫りにします。ここでは、nfsstat、iostat、iotopを含む少なくとも3つについて説明します。次に、wireshareとnfsreplayについての言及が通過しました。これは本当に通常の方法のように聞こえますか?ワイヤーシャークとは別に、それ自体がカテゴリーですが、1つのツールが好きではありませんか?

オープナーの場合、iostatの出力は非常に便利だと思いますが、数字の.00をすべて表示するのは難しいです。 Collectlはまったく同じデータを報告しますが、目には簡単にフォーマットされます。私がnfsstatについてどう思うかはすでにご存じでしょう。collectlはすべてのデータを再生できるので、「再生」ユーティリティは必要ありません。 'iotop'の場合と同様に、collectは、I/Oが含まれるものごとにソートされたプロセスも表示できます。

つまり、すべてがタイムスタンプで完了しています。より細かい監視間隔が必要な場合は、常にサンプリングを0.1秒または0.5秒などの間にクランクバックできますが、プロセスをこれほど高速に監視するとオーバーヘッドが増加しますが、プロセス監視ユーティリティを使用するとそうなります。

そして最後のボーナスは、スプレッドシートにロードして簡単にプロットできるcollectlで収集したものですOR collectl-utilsの一部であるcolplotを使用します。

-マーク

1
user41794

http://nfswatch.sourceforge.net からnfswatchを試してみるとよいでしょう。

http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/ でサンプル出力を確認できます。

nfswatchtopのようなものです(バッチモードがあるかどうかはわかりません)。それが実行されたら、キーを押すことで表示を変更できます(例: "c"は、NFSサーバーを使用してNFSクライアントを表示します)。

ただし、私の簡単なテストでは、nfswatchはNFSv4では動作しないようです。

1
Philip Durbin

Nfsstatを確認してください。それはあなたが望むすべてを示しているわけではありませんが、少なくとも良いサブセットを示しています。

http://linux.die.net/man/8/nfsstat

1
w00t

Nfsreplayをチェックアウトすることをお勧めします。何が起こっているのかを理解するのに役立つかもしれません。また、情報とリンクが表示される場合もあります ここ 役立つ

0
Nick Anderson