Linux性能最適化と監視シリーズ(一)——topツール


サーバに何が起こったのかを説明するtopツール
サーバの詳細な動作性能状態を確認する前に、システム管理者は現在のサーバ状態を全体的に理解する必要がある.topはサーバ全体の状態をチェックする強力なツールであり、topを通じてCPU、Memory、Processの運行情報を取得することができ、以下はtopコマンドを運行した後のデータ表示である.
top - 20:08:09 up 10 min,  1 user,  load average: 0.00, 0.02, 0.01
Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   260016k used,  3664684k free,    13552k buffers
Swap:  4063224k total,        0k used,  4063224k free,    75816k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6284 root      20   0 15028 1308 1000 R  0.3  0.0   0:00.03 top
    1 root      20   0 19356 1580 1268 S  0.0  0.0   0:01.80 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.02 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.03 migration/1
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
   10 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/1

topでCPU性能を監視する
topでサーバの性能を分析する際、まずload averageに注意する、load averageは3つの情報を含み、それぞれ最後の分、最後の5分、最後の15分のシステムの平均性能を指し、この数値のアンカー値(anchor value)は1.0である.シングルコアCPUの場合、アンカー値が1.0に達すると、システムはビジー状態になるが、アプリケーションは正常に動作し、CPUを待機するアプリケーションは何もない.
なお、load averageはCPUではなくシステムの平均性能であり、load averageは1.0をはるかに上回る可能性があるが、システムがI/Oを待つのに忙しいなど、CPUは何もしていない.
システムを常にanchor valueが1.0で動作ようにするのは良いかもしれないが、必要ないかもしれないので、anchor valueが1.0である場合にシステムが良いか悪いかを判断する前に、システム管理者が特定の作業量をより深く理解する必要がある.たとえば、次の2つのタスクについて説明します.
Task 1: while true; do true; done
Task 2: dd if=/dev/sda of=/dev/null
Task 1を実行すると、Task 1はCPUの1つのコア使用率を100%にし、anchor value値も1.0を超え、システムCPUが1つのコアしかない場合、システムは完全に忙しい状態になり、新しいプロセスは二度と開始せず、空きCPUリソースがあるまでキューにキューに入れられる.
Task 2を実行する場合、Task 2はanchor valueを1.0以上にするが、この場合、このタスクはI/Oリソースを待つだけであり、CPUは任意に他のプロセスに使用することができる.
もしシステムCPUが非常に忙しい場合、topコマンドのCPU行を通じてシステムが何をしているかを深く分析する必要があります.CPU行は以下のCPU性能情報を提供します.
us
usはuser spaceの負荷を表す、通常user spaceの下で実行するアプリケーションは端末ユーザによって起動され、root権限で実行する、usの負荷が高い場合、これはアプリケーションの消費CPUが高いことを意味する.
sy
Syはsystem spaceの負荷を表す、通常system spaceで実行されるプロセスはオペレーティングシステムカーネルによって呼び出され、通常syは高くない.
ni
Niは起動するniceコマンドで調整するタスク数を示す.
id
idはCPUの空き時間を示す.
wa
waはCPUがI/Oを待っていることを示す、waが30以上連続している場合、storageとnetworkを関連付けるI/O channelに問題があることを示し、networkとstorageの性能問題を確認する必要がある.
hi
hiは、CPUがハードウェア端末を処理するのにかかる時間を示す.
si
Siはソフトウェアの中断に関係する、通常はカーネルによって作成される低優先度のソフトウェア端末であり、siの使用率が高いことはほとんどない.
st
stは仮想化された使用環境に関係する、ある仮想化環境では、仮想機会ホストオペレーティングシステムがCPUを盗む時間があり、このような場合、stは使用率があり、使用率が高い場合は、サーバから仮想マシンをアンインストールすることを考慮する必要がある.
topでメモリパフォーマンスを監視する
トップコマンドのMem行はメモリとスワップパーティションに関係しており、Mem行には5つのパラメータが含まれています.
total
サーバ全体の物理メモリ
used
buffersとcacheを含む現在使用されている合計メモリ.
free
現在使用されているメモリはありません.
buffers
bufferは、サーバが使用するwrite cacheに関係する、ファイルシステムテーブルやメモリに置く必要があるサーバの構造も含む.ディスクに書き込む必要のあるすべてのデータは、まずwrite cacheに書き込まれ、端末ユーザの観点から、ユーザが使用するアプリケーションはデータの書き込みを待つ必要はない.システムがfreeのメモリから割り当てることができないより多くのメモリを必要とする場合、write cacheはリフレッシュされ、write cacheが使用するメモリを他のアプリケーションに使用することができる.要するにbufferはシステムをより速くする.
cached
ユーザがサーバからファイルを要求する場合、通常、ファイルはディスクから読み取る必要があるが、ディスクはメモリより約1000倍遅いため、ディスクからファイルを取得するたびにcacheに格納し、次回のファイルの読み取りを加速する.cahceに割り当てるメモリが他のアプリケーションに使用する必要がある場合、cacheは直ちにfreeメモリに解放されて使用することができる.読み取り回数の多いサーバでは、cacheメモリが通常高く、cacheメモリが総メモリの40%未満であると、サーバのパフォーマンスが遅くなる可能性があり、メモリを増加する必要がある.
swap
swap spaceはハードディスク上でメモリをシミュレートするものであり、システムがswapを使用し始めると、メモリより約1000倍遅いため、これはよくない.しかし、swapは、カーネルが不要なデータをメモリから除去し、より多くのメモリ空間を解放するために使用するなど、常に悪いわけではない.
BufferとCacheメモリの監視
1.サーバーを再起動する.
2.現在のサーバBufferとCacheを観察する.
top - 03:17:03 up 1 min,  3 users,  load average: 0.25, 0.11, 0.04
Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   199948k used,  3724752k free,     9448k buffers
Swap:  4063224k total,        0k used,  4063224k free,    55316k cached

3.次のコマンドを実行してCacheを満たす、Cacheの数を観察する.
cd /etc
for I in *
do
    cat $I
done
top - 03:19:09 up 3 min,  3 users,  load average: 0.09, 0.08, 0.03
Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.0%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   212968k used,  3711732k free,    10556k buffers
Swap:  4063224k total,        0k used,  4063224k free,    65124k cached

4.次のコマンドを実行してBufferを満たす、Bufferの数を観察する.
ls -Rl / > /dev/null &
top - 03:22:07 up 6 min,  3 users,  load average: 0.44, 0.22, 0.08
Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924700k total,   329528k used,  3595172k free,    39116k buffers
Swap:  4063224k total,        0k used,  4063224k free,    65176k cached

5.次のコマンドによりサーバBufferとCacheをクリアする.
echo 3 > /proc/sys/vm/drop_caches

topでプロセスを監視する
PID
プロセスID
USER
このプロセスを開始するユーザー.
PR
プロセスの優先度
NI
プロセスのnice値を開始しました.
VIRT
プロセスの最初の起動時に必要なメモリサイズ.
RES
常駐メモリは、プロセスの実行に実際に必要なメモリを表し、実際のメモリはvirtメモリよりも小さい可能性がある.
SHR
現在のプロセスが他のプロセスと共有するメモリ.
S
プロセスの状態
%CPU
現在のプロセスで使用するCPU時間の割合.
%MEM
現在のプロセスで使用するメモリの割合.
TIME+
現在のプロセスで使用するCPUサイクルの合計時間.
COMMAND
プロセスコマンド