はじめに
業務中Load Averageを見ることが多いが
Load Averageについてあらためて自分のためにも整理&メモ
また、誰かに質問された際にええっとええっと。。。とならないように
質問されたらって仮定ですw
知ってるつもりなのに意外に答えられないんですよね(>_<)
Load Average
Load Averageってなに?(※こぴりました。
実行プロセス数(実行中プロセス数+実行可能プロセス数)
Load Averageが高いとなに?
語弊を恐れず言えば
Load Averageが高い ≒ サーバ負荷が高い ≒ 重い ≒ 応答速度が遅い
Load Averageが高いってどんな状態?もっとkwsk...的な
コマンド(uptimeなど)でLoad Averageを表示した場合に
Load Averageの値がCPUの数より大きい場合、「Load Averageが高い」( 負荷が高い、重い )
CPUの数はどうやってみるの?
Load Averageはどうやって見るの?
見るための代表的なコマンドとその例
コマンド)
uptime
top
w
sar
例)
# uptime 23:05:31 up 96 days, 12:33, 11 users, load average: 0.00, 0.00, 0.00←ココ
- top (top後に1と入力:コア数ごとの使用率まで表示)
# top top - 23:11:59 up 241 days, 7:10, 18 users, load average: 5.11, 5.27, 3.62←ココ Tasks: 1050 total, 1 running, 992 sleeping, 0 stopped, 57 zombie Cpu0 : 7.0%us, 3.4%sy, 0.1%ni, 75.7%id, 13.4%wa, 0.1%hi, 0.3%si, 0.0%st Cpu1 : 8.5%us, 3.1%sy, 0.1%ni, 87.5%id, 0.8%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 6.4%us, 2.2%sy, 0.1%ni, 90.6%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 9.2%us, 3.2%sy, 0.1%ni, 86.8%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 12298068k total, 12231068k used, 67000k free, 1724624k buffers Swap: 2031608k total, 84356k used, 1947252k free, 369288k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3294 root 18 0 246m 219m 712 D 7.0 1.8 0:33.33 rsync 16354 hoge 15 0 11380 1824 796 R 4.2 0.0 0:00.06 top 3028 root 18 0 3644 284 232 S 2.8 0.0 1615:29 readproctitle 323 root 10 -5 0 0 0 S 1.4 0.0 210:26.58 kswapd0 1 root 15 0 10348 680 572 S 0.0 0.0 33:09.67 init 2 root RT -5 0 0 0 S 0.0 0.0 10:44.71 migration/0 3 root 34 19 0 0 0 S 0.0 0.0 1:39.07 ksoftirqd/0 : :
- w
# w 23:18:16 up 241 days, 7:16, 18 users, load average: 3.86, 4.55, 3.80←ココ USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT hoge pts/2 172.21.25.243 23:11 0.00s 0.03s 0.00s sshd: hoge [priv] mone pts/12 172.21.25.240:S. 10:31 5:33m 0.04s 0.02s ssh ixvm1 mone pts/16 172.21.25.240:S. 10:41 10:16m 0.97s 0.96s ssh 192.168.42.31 mone pts/17 172.21.25.240:S. 10:44 6:13m 0.04s 0.02s -/bin/tcsh piyo pts/19 172.21.25.246:S. 19Mar13 5days 1.11s 0.02s /bin/zsh piyo pts/38 172.21.25.246:S. 29Mar13 5:21m 0.29s 0.29s /bin/zsh ※詳しくはこちら→http://network.station.ez-net.jp/os/linux/operation/os/w/centos/5.4.asp
- sar (sar -q 1 3)
# sar -q 1 3 Linux 2.6.18-194.26.1.el5 (hoge.co.jp) 2013年04月22日 23時24分58秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15←ココ 23時24分59秒 0 1181 2.64 4.04 3.93 23時25分00秒 0 1176 2.64 4.04 3.93 23時25分01秒 0 1176 2.64 4.04 3.93 平均値: 0 1178 2.64 4.04 3.93 -------- ※補足 q:実行キュー長さと、ロードアベレージを 1:1秒間隔で 3:3回表示
CPUの数の確認
CPUの数ってどうやってみるの?
/proc/cpuinfoを見る
例)
cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU X3353 @ 2.66GHz stepping : 6 cpu MHz : 2666.666 cache size : 6144 KB physical id : 0 siblings : 4 core id : 0 cpu cores : 4 apicid : 0 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr sse4_1 lahf_lm bogomips : 5333.33 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 1 ここからprocessorの数に応じて繰り返し(コマンド打って見てみてください
CPUの数(processor数)どうやって数えるの?
/proc/cpuinfoのprocessorの数を確認
# grep 'processor' /proc/cpuinfo processor : 0 processor : 1 processor : 2 processor : 3 ↑これがOSから見えるCPU(processor)の数分表示される。この例ではは4つ
OSから見えるCPUの数ってなに?
物理的に1つのCPUなんだけど、コアを2つ載せてる
とか
物理的に1つのコアなんだけど、HT技術で2倍にしてる
とか
マザーボードに物理的に2つのCPUを載せてる
とか。詳細な説明はこのへん↓(長いので人任せにしますw
CPUやコアについて:http://homepage2.nifty.com/kamurai/CPU.htm#core
デュアルコアとは:http://e-words.jp/w/E38387E383A5E382A2E383ABE382B3E382A2.html
デュアルコアとデュアルプロセッサの違い:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1110534276
デュアルコア誕生理由とメリット:http://www.tdk.co.jp/techmag/knowledge/200606u/index2.htm
物理的なCPUの数はわかるの?
/proc/cpuinfoのphysical idのid番号数をみる
# cat /proc/cpuinfo | grep 'physical id' physical id : 0 physical id : 0 physical id : 0 physical id : 0 ↑physical idがすべて0(番)なので、物理的なCPUは1つ 2つ以上ある場合はphysical idが0、1のように番号が割り振られていく
物理的なコア数はわかるの?
/proc/cpuinfoのcpu coresの数やcore idでわかる
# cat /proc/cpuinfo | grep 'core id' core id : 0 core id : 1 core id : 2 core id : 3 # cat /proc/cpuinfo | grep 'cpu cores' cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 ↑coreのidが1〜4まで割り振られているので4つ。 また、今回の例で言うとcpu coresが4なので、'physical id = 0番のcpu'にcoresが4つ
結局まとめて言うとどうやって数えるの?
今回の例) /proc/cpuinfoから [結果] processor = 0〜3 = OSから見えるcpuの数 = 4 [内訳] physical id = 0のみ = 物理的なcpu数 = 1 core cores = 4 = 物理的なコア数 = 4 ってことで、1つのcpuにコアが4つあるcpuで、OSからは4つに見えます。的な感じですかね [図] CPU ┏━━━━━━━━┓ ┃ コア コア ┃ ┃┏━━┓┏━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━┛┗━━┛┃ ┃┏━━┓┏━━┓┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┃ ┃┗━━┛┗━━┛┃ ┗━━━━━━━━┛
他の例は?
他の方のサイトでも解説されてるので、そちらをパクって参考にして説明します
こことか→http://d.hatena.ne.jp/moroto1122/20100917/1284719047
例)
# grep "processor" /proc/cpuinfo
processor : 0
processor : 1
(略)
processor : 15# grep "physical id" /proc/cpuinfo | sort | uniq
physical id : 0
physical id : 1# grep "siblings" /proc/cpuinfo
siblings : 8
siblings : 8# grep "cpu cores" /proc/cpuinfo
cpu cores : 4
の場合
/proc/cpuinfoから [結果] processor = 0〜15 = OSから見えるcpuの数 = 16 [内訳] physical id = 0〜1 = 物理的なcpu数 = 2 siblings = 8 = 1CPUにあるように見えるコア数 = 8 core cores = 4 = 物理的なコア数 = 4 ってことで、物理的なCPUは2つ。 1つのCPUにコアが4つあり、そのコアがそれぞれHT(Hyper Threading)により2倍になってるので OSからは16コに見える、って感じでしょうか。 [図] CPU1 CPU2 ┏━━━━━━━━┓ ┏━━━━━━━━┓ ┃ コア コア ┃ ┃ コア コア ┃ ┃┏━━┓┏━━┓┃ ┃┏━━┓┏━━┓┃ ┃┃HT┃┃HT┃┃ ┃┃HT┃┃HT┃┃ ┃┣----┫┣----┫┃ ┃┣----┫┣----┫┃ ┃┃HT┃┃HT┃┃ ┃┃HT┃┃HT┃┃ ┃┗━━┛┗━━┛┃ ┃┗━━┛┗━━┛┃ ┃┏━━┓┏━━┓┃ ┃┏━━┓┏━━┓┃ ┃┃HT┃┃HT┃┃ ┃┃HT┃┃HT┃┃ ┃┣----┫┣----┫┃ ┃┣----┫┣----┫┃ ┃┃HT┃┃HT┃┃ ┃┃HT┃┃HT┃┃ ┃┗━━┛┗━━┛┃ ┃┗━━┛┗━━┛┃ ┗━━━━━━━━┛ ┗━━━━━━━━┛
まとめ
Load Averageを表示することで値が高いと負荷は高そうってことはわかる
(CPU負荷かIO負荷かは別途切り分けが必要)
が、その値で負荷が高そうかどうかを判断するためには
CPUの数を鑑みて判断してね、と。