Linuxメモリ、パフォーマンス診断におけるvmstatコマンドの詳細
vmstatコマンドは最も一般的なLinux/Unixモニタリングツールであり、サーバのCPU使用率、メモリ使用、仮想メモリ交換状況、IO読み書き状況など、所定の時間間隔のサーバの状態値を表示することができます.トップに比べて、vmstatでは、各プロセスのCPU使用率やメモリ使用率だけでなく、マシン全体のCPU、メモリ、IOの使用状況が表示されます.
実行例
一般的なvmstatツールの使用は、2つの数値パラメータで行われます.1つ目のパラメータは、サンプリングの間隔数、単位は秒、2つ目のパラメータは、サンプリングの回数などです.
2はサーバ状態を2秒ごとに収集し,1は1回のみ収集することを示す.
実際、アプリケーションでは、vmstatを直接終了したくない場合など、しばらく監視し続けます.
これはvmstatが2秒ごとにデータを収集し、私がプログラムを終了するまで収集したことを示しています.
パラメータの詳細
Linuxメモリモニタvmstatコマンド出力は6つの部分に分けられます.
一般的な診断:
1、rが常に4より大きく、idが常に40より小さい場合、中央プロセッサの負荷が重いことを示す.
2、biの場合、boは長期にわたって0に等しくなく、物理メモリ容量が小さすぎることを示す.
各パラメータの具体的な意味は以下の通りです.
rは実行キュー(つまりどれだけのプロセスが本当にCPUに割り当てられているか)を表し、私がテストしたサーバーは現在CPUが空いていて、プログラムが走っていないので、この値がCPUの数を超えると、CPUのボトルネックが発生します.これもトップの負荷に関係していますが、一般的に負荷が3を超えると比較的高く、5を超えると高く、10を超えると異常になり、サーバーの状態が危険です.トップの負荷は毎秒の実行キューに似ています.実行キューが大きすぎると、CPUが忙しいことを示し、一般的にCPUの使用率が高くなります.
bはブロックのプロセスを表して、これは多く言わないで、プロセスはブロックして、みんなは知っています.
swpd仮想メモリが使用されているサイズは、0より大きい場合は、マシンの物理メモリが不足していることを示します.プログラムメモリの漏洩の原因でなければ、メモリをアップグレードするか、メモリを消費するタスクを他のマシンに移行する必要があります.
free空き物理メモリの大きさ、私のマシンメモリは全部で8 Gで、残りは3415 Mです.
buffLinux/Unixシステムはストレージに用いられて、ディレクトリの中にどんな内容があって、権限などのキャッシュ、私の本機は大体300 M余りを占有します
Cachecacheは私たちが開いたファイルを直接記憶し、ファイルをバッファリングするために使用され、私は300 M以上を占めています(ここではLinux/Unixの賢いところで、空き物理メモリの一部をファイルとディレクトリのキャッシュに持ってきて、プログラムの実行性能を高めるために、プログラムがメモリを使用するとbuffer/cachedがすぐに使用されます).
Siは毎秒ディスクから仮想メモリのサイズを読み込みます.この値が0より大きいと、物理メモリが足りないか、メモリが漏れていることを示します.メモリ消費プロセスを探して解決します.私の機械はメモリに余裕があり、すべて正常です.
so仮想メモリ書き込みディスクのサイズは、この値が0より大きい場合、同じです.
Biブロックデバイスが毎秒受信するブロックの数、ここのブロックデバイスはシステム上のすべてのディスクとその他のブロックデバイスを指し、デフォルトのブロックサイズは1024 byteで、私の本体にはIO操作がないので、ずっと0ですが、私は大量のデータ(2-3 T)をコピーする機械を処理して140000/sに達することができることを見たことがあります.ディスクの書き込み速度の差は140 M毎秒ではありません.
boブロックデバイスが毎秒送信するブロックの数、例えばファイルを読み込むと、boは0より大きくなります.Biとboは一般的に0に近いが,そうでなければIOが頻繁すぎて調整が必要である.
in毎秒CPUの割り込み回数、時間割り込みを含む
csの1秒あたりのコンテキスト切替回数、例えばシステム関数を呼び出すと、コンテキスト切替、スレッドの切替、プロセスコンテキスト切替を行います.この値は小さいほど良いです.大きすぎます.apacheやnginxのようなwebサーバでは、スレッドやプロセスの数を低くすることを考慮します.私たちは一般的に性能テストをする時に数千同時あるいは数万同時のテストを行って、webサーバーのプロセスを選択してプロセスあるいはスレッドのピークからずっと下げることができて、csから1つの比較的小さい値まで圧測して、このプロセスとスレッドの数は比較的に適当な値です.システム呼び出しも、システム関数を呼び出すたびに、私たちのコードがカーネル空間に入り、コンテキストの切り替えを招きます.これはリソースを消費します.頻繁にシステム関数を呼び出すことも避けなければなりません.コンテキストの切り替え回数が多すぎるのは、あなたのCPUの大部分がコンテキストの切り替えに浪費されていることを示しており、CPUがまじめなことをする時間が少なくなり、CPUが十分に利用されていないため、望ましくありません.
usユーザーCPU時間、私はかつて暗号解読が頻繁なサーバーで、usが100に近く、r実行キューが80に達していることを見ることができます(機械は圧力テストをしていて、性能がよくありません).
SyシステムCPU時間は、高すぎると、システム呼び出し時間が長いことを示し、例えばIO操作が頻繁である.
idアイドルCPU時間は、一般的にid+us+sy=100であり、一般的にidはアイドルCPU使用率、usはユーザCPU使用率、syはシステムCPU使用率と考えられている.
wt IO CPU待ち時間.本文はLinux学習教程網 から来た.
実行例
一般的なvmstatツールの使用は、2つの数値パラメータで行われます.1つ目のパラメータは、サンプリングの間隔数、単位は秒、2つ目のパラメータは、サンプリングの回数などです.
root@vm-199:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 97640 53884 192800 578212 0 0 3 20 1 12 1 2 93 3
2はサーバ状態を2秒ごとに収集し,1は1回のみ収集することを示す.
実際、アプリケーションでは、vmstatを直接終了したくない場合など、しばらく監視し続けます.
root@vm-199:~# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 1 97640 50348 192812 578352 0 0 3 20 1 12 1 2 93 3
0 0 97640 54636 192812 578360 0 0 0 14 126 147 2 4 86 8
0 3 97640 53908 192816 578356 0 0 0 62 96 110 2 4 86 9
0 0 97640 54156 192816 578360 0 0 0 14 113 118 3 5 83 11
0 0 97640 53908 192816 578360 0 0 0 16 107 103 2 3 87 9
これはvmstatが2秒ごとにデータを収集し、私がプログラムを終了するまで収集したことを示しています.
パラメータの詳細
Linuxメモリモニタvmstatコマンド出力は6つの部分に分けられます.
(1) procs:
r: 。
b: io 。
(2)Linux memoy:
swpd: ( KB)。
free: ( KB)。
buff: ( :KB)。
cache: ( :KB)。
(3) Linux swap
si: , :KB/ 。
so: , :KB/ 。
(4)Linux io :
bi: , : / 。
bo: , : / 。
(5)Linux system :
in: , 。
cs: ( ) 。
(6)Linux cpu :
cs: 。 。
sy: 。 。
id: 。 。
一般的な診断:
1、rが常に4より大きく、idが常に40より小さい場合、中央プロセッサの負荷が重いことを示す.
2、biの場合、boは長期にわたって0に等しくなく、物理メモリ容量が小さすぎることを示す.
各パラメータの具体的な意味は以下の通りです.
rは実行キュー(つまりどれだけのプロセスが本当にCPUに割り当てられているか)を表し、私がテストしたサーバーは現在CPUが空いていて、プログラムが走っていないので、この値がCPUの数を超えると、CPUのボトルネックが発生します.これもトップの負荷に関係していますが、一般的に負荷が3を超えると比較的高く、5を超えると高く、10を超えると異常になり、サーバーの状態が危険です.トップの負荷は毎秒の実行キューに似ています.実行キューが大きすぎると、CPUが忙しいことを示し、一般的にCPUの使用率が高くなります.
bはブロックのプロセスを表して、これは多く言わないで、プロセスはブロックして、みんなは知っています.
swpd仮想メモリが使用されているサイズは、0より大きい場合は、マシンの物理メモリが不足していることを示します.プログラムメモリの漏洩の原因でなければ、メモリをアップグレードするか、メモリを消費するタスクを他のマシンに移行する必要があります.
free空き物理メモリの大きさ、私のマシンメモリは全部で8 Gで、残りは3415 Mです.
buffLinux/Unixシステムはストレージに用いられて、ディレクトリの中にどんな内容があって、権限などのキャッシュ、私の本機は大体300 M余りを占有します
Cachecacheは私たちが開いたファイルを直接記憶し、ファイルをバッファリングするために使用され、私は300 M以上を占めています(ここではLinux/Unixの賢いところで、空き物理メモリの一部をファイルとディレクトリのキャッシュに持ってきて、プログラムの実行性能を高めるために、プログラムがメモリを使用するとbuffer/cachedがすぐに使用されます).
Siは毎秒ディスクから仮想メモリのサイズを読み込みます.この値が0より大きいと、物理メモリが足りないか、メモリが漏れていることを示します.メモリ消費プロセスを探して解決します.私の機械はメモリに余裕があり、すべて正常です.
so仮想メモリ書き込みディスクのサイズは、この値が0より大きい場合、同じです.
Biブロックデバイスが毎秒受信するブロックの数、ここのブロックデバイスはシステム上のすべてのディスクとその他のブロックデバイスを指し、デフォルトのブロックサイズは1024 byteで、私の本体にはIO操作がないので、ずっと0ですが、私は大量のデータ(2-3 T)をコピーする機械を処理して140000/sに達することができることを見たことがあります.ディスクの書き込み速度の差は140 M毎秒ではありません.
boブロックデバイスが毎秒送信するブロックの数、例えばファイルを読み込むと、boは0より大きくなります.Biとboは一般的に0に近いが,そうでなければIOが頻繁すぎて調整が必要である.
in毎秒CPUの割り込み回数、時間割り込みを含む
csの1秒あたりのコンテキスト切替回数、例えばシステム関数を呼び出すと、コンテキスト切替、スレッドの切替、プロセスコンテキスト切替を行います.この値は小さいほど良いです.大きすぎます.apacheやnginxのようなwebサーバでは、スレッドやプロセスの数を低くすることを考慮します.私たちは一般的に性能テストをする時に数千同時あるいは数万同時のテストを行って、webサーバーのプロセスを選択してプロセスあるいはスレッドのピークからずっと下げることができて、csから1つの比較的小さい値まで圧測して、このプロセスとスレッドの数は比較的に適当な値です.システム呼び出しも、システム関数を呼び出すたびに、私たちのコードがカーネル空間に入り、コンテキストの切り替えを招きます.これはリソースを消費します.頻繁にシステム関数を呼び出すことも避けなければなりません.コンテキストの切り替え回数が多すぎるのは、あなたのCPUの大部分がコンテキストの切り替えに浪費されていることを示しており、CPUがまじめなことをする時間が少なくなり、CPUが十分に利用されていないため、望ましくありません.
usユーザーCPU時間、私はかつて暗号解読が頻繁なサーバーで、usが100に近く、r実行キューが80に達していることを見ることができます(機械は圧力テストをしていて、性能がよくありません).
SyシステムCPU時間は、高すぎると、システム呼び出し時間が長いことを示し、例えばIO操作が頻繁である.
idアイドルCPU時間は、一般的にid+us+sy=100であり、一般的にidはアイドルCPU使用率、usはユーザCPU使用率、syはシステムCPU使用率と考えられている.
wt IO CPU待ち時間.