LoginSignup
0
1

More than 1 year has passed since last update.

topコマンドを使ってパフォーマンスチューニングをする

Last updated at Posted at 2020-09-06
  • CPU負荷
  • メモリ負荷

の2種類があると話をしました。

どっちなのっていうのを知るためにどうすればいいかについて書きます。

top

$ top          # CPU使用率順にソート
$ top -a       # メモリ使用率順にソート
$ top -p [PID] # 特定のプロセスを監視
$ top -d1      # 1秒ごとに更新

やってみた。

image.png

まず、非常に重要な数値が

load average

これは、システム全体の負荷(メモリ、CPUに関わらず)を表す数値として認識してください。
つまり、もしこの数値が高ければ、サーバーを最適化することで、処理が高速になる。
この数値が低いのに、レスポンスタイムが遅いなどの問題があれば、ネットワーク負荷(トラヒック理論)など別の原因によるものになるので、最初に確認しましょう。

定義は以下です。
1CPUにおける単位時間あたりの実行待ちとディスクI/O待ちのプロセスの数

Linuxカーネルはプロセス1つごとにプロセスディスクリプタを持っていて、そのstateメンバにプロセスの状態を入れて管理している。
プロセスの状態は以下のように区別される。

  • TASK_RUNNING: 実行可能な状態。CPUが空いていれば実行できる。
  • TASK_UNINTERRUPTABLE: 割り込み不能な待ち状態。ディスクI/O待ちなど、短時間で復帰するもの。
  • TASK_INTERRUPTABLE: 割り込み可能な待ち状態。ユーザの入力待ちなど、復帰時間が予測できないもの。
  • TASK_STOPPED: 実行中断になった状態。リジュームされるまでスケジューリングされない。
  • TASK_ZOMBIE: ゾンビプロセス。子プロセスがexitして親プロセスにwaitされていないもの。 run queueに入っているプロセスのうち、TASK_RUNNINGとTASK_UNINTERRUPTABLEのものがload averageとして換算される。

load average、つまりシステムの負荷とは、「CPUの実行権限が与えられるのを待っているプロセス」と「ディスクI/Oの完了を待っているプロセス」の多さのことである。

Tasks

実行してるプロセスの数がわかる。
TASK_RUNNINGの個数をかぞえあげる。

思ってる以上にプロセスが動いてたりしたら、
何が動いてんの?ってなるから、みておくといいかも。

%CPUs

左から

  • users
  • systems
  • nice
  • idle
  • wait
  • heardware
  • software
  • steal

CPU使用率がわかるので、100%に近くなっていたら、
負荷が大きすぎるとわかる。

その原因が

  • user program
  • system program

のどちらにあるのかがわかるので、チェックする必要がある。

Mem

3696.7 total,   1900.0 free,    226.4 used,   1570.3 buff/cache

Mem Swap

スワップの回数が多いと、
メモリに収まりきっていなくて、ストレージの方を頻繁に参照していることがわかる。
そのせいでI/O待ちが発生しているかどうかは、
load averageや sar vmstatを確認してください。

PR NI VIRT RES SHR S %CPU %MEM TIME+
優先度 相対優先度 仮想メモリ 物理メモリ 共有メモリ 状態 CPU使用率 メモリ使用率 実行時間

I/O待ち時間は非常に誤解を招きやすい指標だ。CPUを酷使するプロセスがほかにやってくると、I/O待ち時間の値は下がる。するべき仕事ができたので、CPUはアイドル状態で待っていなくてよいのである。しかし、I/O待ち時間の数値が下がっても、同じディスクI/Oがなくなったわけでも、スレッドをブロックしなくなったわけでもない。逆もありうる。
LinuxではI/O待ち時間は今でもよく使われている指標であり、混乱を招く性質を持ちながら、あるタイプのディスクのボトルネック、つまりCPUがアイドルでディスクがビジーになっている状態を見つけ出すことができている。I/O待ち時間の一つの解釈方法は,I/O待ち時間が存在することをシステムにボトルネックがある兆候と捉え、例え高いCPU使用率とI/O待ち時間が両立している場合でも、I/O待ち時間を最小限に抑えるようにシステムをチューニングするというものである。

詳解 システムパフォーマンス
から引用

I/O負荷に関しては、まずは仕組みを正しく理解して、
CPUへの負荷がかかっていないか、
Swapの回数は増えているのか
といった情報についても同時にみていく必要がある。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1