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


22

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

私が知りたいのは次のようなものです:

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

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


これは、システムタップが作成されたようなもののようです。ドキュメントは少しがらくたですが、私はあなたがそれを使用してこの種の分析を行うために何かを立てることができると思います。 sourceware.org/systemtap/examples/keyword-index.html
Cian

回答:


2

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

tshark -R nfs -i eth0

2

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

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

ディスクのテーマを自分で見たい場合、collectlもそれを行うことができ、すべてを調整された表示で表示できます。

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


2

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

(私はこのオフトピックメモを追加させてください。そこ、あなたの要件に合致するソフトウェア:SunのDTraceのベースの解析(PDFファイル)。 -残念ながらLinux上では使用できませんあなたが偉大な例をたくさん見つけることができますブレンダン・グレッグさんのブログ説明このツールの機能。)



1

私の意見では、これは今日のツールの問題を正確に強調しています。ここでは、nfsstat、iostat、iotopを含む少なくとも3つについて言及しています。それから、wireshareとnfsreplayについての言及がありました。これは本当に物事を行う通常の方法のように聞こえますか?Wiresharkのカテゴリはすべて独自のものですが、1つのツールを好まないでしょうか?

開幕戦では、iostatの出力は非常に便利ですが、数字に含まれるすべての.00で読むのは非常に困難です。Collectlはまったく同じデータを報告しますが、目にははるかに簡単にフォーマットされます。私がnfsstatについて考えていることはすでに知っています。collectlはどんなデータでも再生できるので、「再生」ユーティリティは必要ありません。「iotop」に関しては、collectはI / Oを含むあらゆるものによってソートされたプロセスも表示できます。

そのため、タイムスタンプが付いた完全版もあります。より細かい監視間隔が必要な場合は、サンプリングを常に0.1秒または0.5秒またはその中間にクランクバックできますが、プロセスを高速で監視すると、プロセス監視ユーティリティを使用した場合にオーバーヘッドが増加します。

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

-マーク


1

あなたはしようとする場合がありますnfswatchからhttp://nfswatch.sourceforge.net

サンプル出力はhttp://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/で見ることができます

nfswatchのようなものですtop(ただし、バッチモードがあるかどうかはわかりません)。実行したら、キーを押すことで表示を変更できます(たとえば、「c」を押してNFSサーバーを使用してNFSクライアントを表示します)。

しかし、私の簡単なテストでは、nfswatchNFSv4 で動作しないようです。


1
興味深い提案。実際、著者自身はNFSv4はサポートされておらず、ツールは約3年間更新されていないと述べています。それは非常に役立つと思います!
トニン

1

現時点ではより良い答えはありませんが、ディスク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"

これは、NFSでトラフィックを引き起こしているホストを特定するためにこれまで見つけた最良のソリューションです。その後、クライアントにアクセスして、アクセスするファイルを確認できます。ありがとうございました!
ペシュー

0

nfsreplayをチェックアウトすることをお勧めします。何が起こっているかを把握するのに役立つかもしれません。また、ここの情報とリンク役に立つかもしれません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.