サーバーリソース分析の勘所(ディスクI/O編)

Pocket
LinkedIn にシェア

先日のCPU編に引き続いて、ディスクI/O編と題しましてまとめていきます。

Q.ディスクI/Oには何を見ればいいの?

基本的にはiostatで見ていけばいいです。ですが、簡易にパフォーマンスを見たいだけなら、dstatでも見ることができます。

※dstat実行の例
スクリーンショット 2015-05-03 11.49.50


私の場合、まずはdstatでIO性能を見ます。dstatで見えるのは、ディスクのread性能(read/sec)とwrite性能(write/sec)が見れます。そのとき動かしているアプリケーションの動きから見てあまりにも不自然な値となっていなければ、そこで観察をやめます。

参考→サーバリソースをリアルタイムに監視するdstatのインストールと使い方

なんとなく、少なすぎたり大きすぎたり、むしろよくわからない…というような状況の時はiostatを見るようにしています。

Q.iostatを見るときに有効なオプションは?

私がいつも見るときのオプションは、「iostat -kx」です。

※iostat実行の例
スクリーンショット 2015-05-03 11.58.12

これによって、単位をキロバイト(-k)とし、すべての統計情報を表示させます。

Q.で、まずは何を見れば?

まず最初に見るのは、「%util」です。

「%util」はディスクIOで使用されているCPUの割合を示します。つまり、「%util」が高いとCPUパワーがディスクIOに多く割かれていることがわかります。

「CPUパワーがディスクIOに割かれている」ということは、本当はCPUパワーというのは、計算そのものに使うべきところを、データを読み書きすることに多くを使用していることになります。

つまりは、ディスクIOを多くさせるアプリケーションではない限り、「%util」が高いことは無駄にIOが多くなっていることを示していることになります。

ここでまず無駄にディスクIOを実行するような作りになっていないか確認しましょう。よくあるのは一時ファイルを書き出していることだったりします。サーバに十分なメモリがあるのなら、可能な限りメモリ上で処理するようにしましょう。SSDが一般的となった最近であっても、確実にそちらのほうが高速です。

また、iostatはディスクデバイスそれぞれについて表示されますので、自分がアプリケーションで利用させているデバイスがどれかを確認しておくことを忘れずに。

Q.%utilが高いことだけ見ればいいの?

次に、「r/s」や「w/s」、「rrqm/s」「wrqm/s」を見てみます。

それぞれの細かい意味は違いますが、要は単位時間あたりの読み込み、書き込み性能を示しています。

そのアプリケーションがデータを書き込むことが主な処理かどうかを確認し、アプリケーションとして無駄に処理しているかどうか、ここで判別することもできますが、よくわからない場合もやはりあります。

その場合には、次に「await」あたりを見てみます。

このあたりで、IOのリクエスト数が多いのか、IO一つあたりの読み込み量もしくは書き込み量が大きいのかがわかってきます。

もし、awaitが大きければ、それだけ「IOのリクエスト数」が多いということになります。となると、アプリケーションでそれだけ細かくIOを実行しているということです。

その細かいIOは期待通りなのか?まとめることができないか?など考慮してみましょう。通常は「ファイルオープン」「ファイルクローズ」処理は遅いので、アプリケーション中で大量に実施していないか確認してみることをオススメします。

このようにして、IOの中でも読み込みが遅いのか?書き込みが遅いのか?ファイルを開け過ぎなのか?一度に大量に書き込み過ぎなのか?様々な角度で確認ができます。

具体的な対応方法は、アプリケーションによるのでここでは詳細に書けませんが、観点はご紹介できたのではないかと思います。

One thought on “サーバーリソース分析の勘所(ディスクI/O編)

  1. I really like and appreciate your blog post.Thanks Again. fdcgkeaedbda

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください