
Tasks: 747 total, 176 running, 560 sleeping, 0 stopped, 11 zombie
Cpu(s): 10.5%us, 89.2%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 74236420k total, 73285344k used, 951076k free, 12261184k buffers
Swap: 8388600k total, 10404k used, 8378196k free, 27872176k cached
%syがCPUの89%を使用しています。 %syとは何ですか?
これがiostatの姿です
root@host [~]# iostat -xk 5
Linux 2.6.32-431.20.3.el6.x86_64 (host.superhostsite.com) 09/03/2014 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
43.02 0.28 50.00 0.05 0.00 6.65
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sdb 0.25 64.95 14.21 79.82 91.86 579.51 14.28 0.15 1.60 0.09 0.84
sda 0.87 182.70 28.06 206.05 247.08 1629.10 16.03 0.49 2.07 0.09 2.22
avg-cpu: %user %nice %system %iowait %steal %idle
8.45 0.00 91.55 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sdb 0.00 14.00 0.20 15.00 3.20 116.00 15.68 0.03 1.92 0.28 0.42
sda 0.00 23.20 2.00 47.80 25.60 284.00 12.43 0.02 0.42 0.14 0.70
したがって、ディスク使用量は非常に少なくなります。すべてが小さいです。しかし、システムのCPU使用率は89.2%に達しました。
%syはなぜそんなに高いのですか?なぜ私たちはできませんか?
答え1
あなたの質問は基本的に「ここで何が起こっていますか?」と思います。
お客様の結果を解釈して回答いたします。役立つ場合は、お知らせください。詳細を追加します。
(質問を編集して質問をより明確にしてください。そうしないと、質問が閉じられる可能性があります。)
はい、「高いため」と表示されます。CPU用法」!
上部の出力を見てみましょう。
Cpu(s): 10.5%us, 89.2%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
パーセント値は、ユーザーコードまたはシステム(カーネル)コードで時間がかかる場所を示します。これは%sy
システムコードの時間であり、ユーザー時間に対する追加の10%usです。それではCPU使用量は100%です! (0%id-idle-でも見ることができます。)
しかし、もっとたくさんあります:
Tasks: 747 total, 176 running, 560 sleeping, 0 stopped, 11 zombie
176の実行中のプロセスがあります。ただし、コア数が176個未満の場合、一部のコアはCPU時間があれば実行できる状態です。
つまり、負荷が増え、より多くのCPUを100%の利用率で引き上げることができます。
CPU使用率は89.2%ではありません。 100%です。
この観点からは理由はありませんiostat
。この状態では、システムに多くのIOは必要ありません。
しかし、私たちに必要な情報は、少なくとも176のプロセスまたはスレッドが何であるか、実行されていない同様のタスクがより多くある可能性があることです。
次条:彼らは何をしているのですか、その理由は何ですか?
したがって、プロセスのリストを見てくださいtop
。いくつかの明らかな問題が現れることがあります。
「実行可能」状態のプロセスの詳細を学ぶのに役立ちます。
次のコマンドは、「実行可能」状態のすべてのプロセスとスレッド(CPU時間が解放されたときに実行できるアクション)を一覧表示します。
ps -o comm,pid,ppid,user,time,etime,start,pcpu,state --sort=comm aH | grep '^COMMAND\|R$'
ps
私には、自分自身を含む1〜2行だけが表示されます。
答え2
トップ出力でメモリ使用率が高いことがわかります(巨大なファイルシステムキャッシュを含む)。前述のように、カーネルコードはユーザーコードよりも使用されています。おそらく、より多くのkworkerがキャッシュからメモリを解放し、要求プロセスに割り当てるために作業しているからです(メモリを要求したときに実行中のプロセスは176個になる可能性があります)。
1つの解決策は、以下を使用してキャッシュサイズを縮小するか、キャッシュを削除することです。
エコ3> /proc/sys/vm/drop_caches
これはkworkerの数を減らし、最終的にカーネルコードの実行を減らします。