簡単な負荷解析について

はじめに

PCの処理が遅い!って一度は思ったことがあると思います。
ではなぜ処理が遅いのでしょうか。
今回のメモ書きではその原因の簡単な追究方法について書いていきたいと思います!

処理が遅い原因は?

処理が遅い原因は大きく分けて以下のふたつに分けれます。

  • CPU負荷によるもの
  • I/O負荷によるもの

ディスクの入出力は少ないが計算量が多いソフトを使っているとCPUの負荷になります。
逆に算量が少ないがディスクの入出力が多いソフトを使っているとI/O負荷になります。

↑の説明だけではどちらなのかはっきりしないことが多いと思います。
また実際にどのくらい処理が重いのかというのを数値的にみていく方法について以下で書いていきます!

どのくらい処理が重いのか

どのくらい処理が重いかを見る時にロードアベレージという指標をみます。
ロードアベレージとは単位時間あたりに実行できるが待たされているタスクがいくつかを表したものです。
ロードアベレージが高い場合はタスクに待ちが多く発生しているため,負荷が高いつまりは重い状態だと思います。
ちなみにここでの待ちとは以下のふたつの状態にいるタスクのことです

  • CPUを使いたいが他のタスクが使っていて待たされているタスク
  • 処理を続けたいがディスクの入出力が終わるまで待っているタスク

ちなみにキーボードの入力待ちやスリープによる待ちなどのプログラムが自ら待つ場合は待ちタスクとして数えられません。

ではターミナルで以下のコマンドを実行してみましょう。

sar -q

すると以下のような結果がでてくると思います。
f:id:setomoki:20161221214452p:plain
とりあえず確認する項目は以下です。

これらの値が高い場合はCPUの処理かI/Oの処理のどちらかがボトルネックになっています。
ロードアベレージが低いのにシステムのスループットが上がらない場合はソフトウェアの設定や不具合、ネットワーク、リモート側に原因がないかを調べるてみてください。

ここまででロードアベレージが高いというのが確認できたら次はCPU負荷によるものかI/O負荷によるものかの判別を行います。

CPU負荷かI/O負荷

CPU負荷かI/O負荷を判別するために以下のコマンドを実行します。

sar

すると以下のような結果がでてくると思います。
f:id:setomoki:20161221215146p:plain
ここでは以下の項目の確認をしてください。

ここからはそれぞれの値が大きかった場合により対処方法が変わります。

%userの値が大きかった場合

ここでもし%userの値が大きかった場合はユーザアプリケーションのCPU処理が原因で重くなっています。
使用しているアプリケーションの設定や立ち上げ過ぎていないかなどを確認してみましょう。
さらに詳しくどのアプリケーションが原因かをtopコマンドなどを使って調べてみるのも良いと思います。
または、CPUのアップグレードを考えてみるのもひとつの手です。

%systemの値が大きかった場合

%systemの値が大きかった場合はシステム処理に使うのCPUが原因で重くなっています。
こちらの原因は大量のプロセスやスレッドを動作させ,システムコールを呼び出す頻度が高い場合などになります。
一度再起動などを行うと解決するかもしれません。

%iowaitの値が大きかった場合

%iowaitの値が大きかった場合はI/Oに時間がかかており重くなっています。
つまりはディスクからの読み込みに時間がかかっているため読み込みが多いソフトなどの設定を確認しなおすなどが対処方法となってきます。
または,メモリなどを増設したりHDDを使っている場合はSSDに変更することもひとつの手になります。

最後に

今回の記事ではsarをコマンド使って簡単に負荷を解析する方法について書きました。
sarを使うことによりユーザアプリケーション・システム処理・I/Oどれによって負荷がかかっているかの判別が可能になります。
サーバや個人のPCが重いと思った時は一度どこに負荷がかかっているのか調べてみてとどの部分を改良したらよいか検討してみましょう!

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

この記事はほぼサーバなどを触ったことがない人物が学んだことを整理するために書いていますので間違いなどが多々あると思います。間違いなどありましたら是非コメントなどで教えていただけると幸いです。