私はサーバーアプリケーションの負荷を現実的に理解しようとしています。アプリケーションはTCP接続から大量のデータを読み取ります。を使用してCPU使用率を確認すると、プロセスはhtop
高い(85〜100%)CPU%を頻繁に報告しますが、CPUの可視化数値はhtop
はるかに低くなります。報告されたCPU%top
対
サンプル出力 - ユーザーtom pid 26655/26656のプロセスはCPU%が96.2であるのに対し、CPU 1の6.9%、CPU 2の37.4%のみを使用し、合計CPU使用率は44.3%であるようです。
1 [||| 6.9%] Tasks: 48, 128 thr; 2 running
2 [|||||||||||||| 37.4%] Load average: 0.06 0.10 0.09
Mem[|||||||||||||||||||1.10G/3.70G] Uptime: 1 day, 15:16:55
Swp[ 0K/0K]
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
26655 tom 24 4 3216M 63832 13056 S 96.2 1.6 0:33.24 java -jar java_go
26656 tom 24 4 3216M 63832 13056 R 96.2 1.6 0:32.31 java -jar java_go
986 jerry 20 0 3576M 594M 18268 S 18.3 15.7 4h13:46 java -Dcom.sun.ma
1479 jerry 20 0 3576M 594M 18268 S 16.3 15.7 3h37:02 java -Dcom.sun.ma
26881 tom 20 0 129M 2392 1540 R 1.0 0.1 0:00.08 htop
プロセスを実行すると、time
ユーザー時間とシステム時間を加えた値が実際の時間よりはるかに少なく、視覚化がより正確であることがわかります。
real 1m26.787s
user 0m32.344s
sys 0m23.024s
( user + sys / real = 0.6380
)
次に、htop
CPUを消費するために重複を繰り返し実行する無意味なプログラムを使用して、この動作を比較しました。出力はhtop
期待したものに近いです。問題のプロセスはCPUの105%を消費し、視覚化にはCPU 1の100%が使用されていることが示されます。ただし、報告されたCPU使用率は105%ですが、合計CPU%は102.2%にすぎません。
1 [||||||||||||||||||||||||100.0%] Tasks: 46, 117 thr; 2 running
2 [||| 2.2%] Load average: 0.39 0.11 0.08
Mem[|||||||||||||||||||1.06G/3.70G] Uptime: 1 day, 15:12:23
Swp[ 0K/0K]
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
25636 tom 20 0 122M 4604 2032 R 105. 0.1 0:16.32 /usr/bin/python .
986 jerry 20 0 3576M 595M 18268 S 10.5 15.7 4h13:18 java -Dcom.sun.ma
1479 jerry 20 0 3576M 595M 18268 R 9.1 15.7 3h36:35 java -Dcom.sun.ma
25714 tom 20 0 129M 2360 1540 R 1.4 0.1 0:00.04 htop
1298 groot 20 0 173M 67784 11240 S 0.7 1.7 0:04.67 splunkd -p 8089 s
1247 groot 20 0 173M 67784 11240 S 0.7 1.7 9:11.01 splunkd -p 8089 s
top
の個々のプロセスラインがhtop
CPUビジュアライゼーションよりはるかに高い使用率を報告するのはなぜですかhtop
?
早くから調査を始めました。CPU使用率に関するこの記事、これは以前に理解していた内容を繰り返すようです。 CPU使用率はです<process_clock>/<wall_clock>
。では、カーネルとユーザーエントリを非表示または表示できることを知っていますが、htop
これがビジュアライゼーションの使用率が下のリストのプロセスエントリの合計よりも高く、その逆ではない理由に対する答えになることを願っています。
よろしくお願いします!
編集する:
- オペレーティングシステム:CentOS 7
- サーバー: AWS t2.medium インスタンス
また、AWSのXENハイパーバイザーでCPU盗難についても読みました。ここhtop
、拡張の理由から、リソース使用量を実際に理解するためのより効率的な方法としてCloudWatchを使用することをお勧めします。しかし、このリンクでは私ができないことがわかるので、特定のプロセスに対して過度のCPU消費が報告される理由はまだ疑問に思います。プロセスのCPU%の合計が一定量を超えているため、この記事に記載されている違いを見てはいけません。