|
|
在Linux系统中可以通过/proc/stat文件来计算CPU的使用率。其中各项参数说明:
/ l3 B X- {9 y: |# n* U7 K& Y1 s6 A4 I! A8 Y+ G2 P; i: e
cat /proc/stat
, {: C* f/ N5 ?) tcpu 8742195 15 754479 55626730 192455 0 32760 0 0 0% u- J* W$ L7 e8 E2 }* |8 S+ `, i% ^
cpu0 326672 0 97560 7716403 21364 0 7494 0 0 0! R/ [ e9 @+ k4 l# _6 n, e
cpu1 230096 2 109184 7784794 24447 0 5431 0 0 0
) N0 a8 m( R- o, L9 @cpu2 2498253 0 80762 5566047 26575 0 3556 0 0 0( ]" f# Q# {. o" U
cpu3 2733988 0 76288 5345517 18368 0 2986 0 0 0* D+ }+ T' G7 g, I2 U/ {9 C
cpu4 1268765 2 93512 6772088 32527 0 3460 0 0 0+ Q% I0 r( _8 _8 X. i9 h4 C1 W
cpu5 577480 0 100944 7466708 19525 0 3660 0 0 0% d# j* F: ?) I: e3 k3 M1 M! d
cpu6 575574 0 99252 7464805 24467 0 2785 0 0 0
) W6 Q. ]9 T6 T; f% Lcpu7 531364 9 96973 7510365 25178 0 3384 0 0 0' S! a" O* L0 }7 x8 c3 ]
intr 347966894 72 10 0 0 0 0 0 0 1 0 0 0 1066 0 0 80304 385602 739524 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11922 0 1240809 945007 1230083 1116211 1010085 923266 908909 811577 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 08 V, e% Q1 m' W* L% ~
ctxt 374979507
* O; m7 ]% W2 M! p; Y9 ]# f7 wbtime 1694791989; g6 C6 c- R# }) [, j5 {" P1 j; F
processes 2234872
8 A- g) L& A* D. C' {0 jprocs_running 4: j' k0 {. ?; k( R
procs_blocked 0
2 D( i9 A2 _4 t3 Qsoftirq 279664532 1 159117851 16412 20782044 785020 0 41986 18593620 0 80327598
" F% u* v0 G F( Q& B1 p8 p2 E
$ t7 |2 I2 ~+ K! D. k( `2 U: g! \* l6 T1 J2 Y- J
- c' }! L7 I6 O2 C/ g0 C9 c
2 N1 g% U* T, g1 `( d n就拿第一行来说:; b/ W) ?& Q5 u7 z0 J2 c
/ K3 S2 D! C" f" l
cpu 8742195 15 754479 55626730 192455 0 32760 0 0 0- \" j4 p8 o( j) ^
6 X" v) C1 B+ Q. i) N- E) f, g) ^- G/ W
第一个字段(cpu)是cpu标识。% d6 h2 X1 x3 h5 g6 P/ @
[3 E4 c- }# k第二个字段(8742195)表示是从系统启动开始一直到当前时刻,进程在用户态(user)下执行的时间积累。
; Y4 A! Q# d8 u
! \" k- g0 W, o9 U) ?, S" V第三个字段(15)表示是从系统启动开始一直到当前时刻,nice值为负的进程所占用的CPU时间。0 Y& V) q, Y2 W- G
; v! g. J% q, L
第四个字段(754479)表示是从系统启动开始一直到当前时刻,进程在系统内核(system)的执行时间积累。
u2 E" ~- L' s, N$ ^) Q2 w$ L% w D9 f$ p
第五个字段(55626730)表示是从系统启动开始一直到当前时刻,处硬盘IO等待以外其他的空闲时间(idle)积累。
/ J8 E y, J9 ]0 X8 T& k% {, l1 D4 J C- ?6 ]! x; U. @; t
第六个字段(192455)表示是从系统启动开始一直到当前时刻,IO等待(iowait)的时间积累。
8 z0 [# o* {. E, M& a
: |! O, G4 W9 K0 o2 a第七个字段(0)表示是从系统启动开始一直到当前时刻,硬中断的时间(irq)。
3 o" K2 x8 y, |) @. b2 h
- [3 E3 t: ]! o第八个字段(32760)表示是从系统启动开始一直到当前时刻,软中断的时间(softirq)。
2 U3 ^3 @) } k8 h0 T; L' }' J) Z+ n7 q9 F8 @" V% [
剩下的几行:' i+ [0 @# J) J6 D5 M
5 n# E8 \% a8 `9 u Pintr: 给出的是中断信息,第一个数为自系统启动以来,发生的所有中断的次数;后面的每个数对应一个特定的中断,表示该中断自系统启动以来发生的次数。
9 P7 ?( y' l" U+ T/ f5 }5 k( Y% s3 w
ctxt: 表示系统CPU发生的上下文交换次数。
! o% p+ L7 X" o. Z& A; s
! K8 b. J( o: `! d, g: @btime: 表示自系统启动到现在的时间,单位为秒。$ [8 ]/ e) M$ T! f; ^
. z1 C9 \- @) k& | R# Z
processes: 表示自系统启动以来所创建的任务的数目。: H4 h. u+ N* @
1 w4 ?8 n- _$ z$ s ?0 D5 {procs_running: 当前运行队列的任务数目。
( X( v1 Q p, I6 f5 d; q, f, e3 R. b( p4 }/ n
procs_blocked: 当前被阻塞的任务数目,等待I/O完成次数。
! B# R: f' J/ H3 f1 U# G
+ z# `' W. w# h! s' ^3 ?# gCPU的使用率可以通过如下方式计算:
0 M$ Z' [+ _6 J
5 s* I+ U; `) c" scpu_usage=(idle2-idle1)/(cpu2-cpu1)*100
& Q/ s1 k0 Q$ b7 D; T
: Y# C: L3 G8 y5 j- P$ S+ X) T$ scpu_usage=[(user2+sys2+nice2)-(user1+sys1+nice1)]/(total2-total)*100# b' [( s; ^: G" @
& ]5 T* ^$ k: i4 s [
获取CPU使用率的相关脚本如下:: j: k) S5 [' _
, g, L" _! J' d3 o4 W
# S+ L( z! L3 k" N5 T; M6 ]3 @ o登录后复制 4 D }5 M$ L+ {8 S R6 _$ L; j! |
#!/bin/sh
/ A! Y6 V; T* ?9 i2 \#$ g. \! G8 l$ Z6 I: z% |
#脚本功能描述:依据/proc/stat文件获取并计算CPU使用率
+ w* N1 i4 F& t4 v#
! C; z4 k5 G$ J2 X- [7 F4 E( a, ?# p#CPU时间计算公式:CPU_TIME=user+system+nice+idle+iowait+irq+softirq
0 H; l7 v% T: t6 c7 Y#CPU使用率计算公式:cpu_usage=(idle2-idle1)/(cpu2-cpu1)*100
# ~. J: F, {" n& d#默认时间间隔: s4 D3 U6 o# C0 Q0 ?, T
TIME_INTERVAL=5
& e. W, A! l- Q; J* h( P$ P0 v# y/ W
9 J% C* _( f1 H2 K5 L+ ~LAST_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}'): ^9 g) N: j3 M4 t6 l
LAST_SYS_IDLE=$(echo $LAST_CPU_INFO | awk '{print $4}')
# I( [ e5 s% `% T2 O6 m/ H1 f/ ^LAST_TOTAL_CPU_T=$(echo $LAST_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')$ {$ J' w$ J, t& p r6 Q. O
sleep ${TIME_INTERVAL}
( a8 j1 g8 P( T5 [ l- D+ ~NEXT_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
1 ]( t- P. i# U* D! P0 l2 H- [" CNEXT_SYS_IDLE=$(echo $NEXT_CPU_INFO | awk '{print $4}')6 n3 |3 r3 D! T
NEXT_TOTAL_CPU_T=$(echo $NEXT_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')# F% P5 ^$ V- n& {+ W- m
* J5 [/ x% p, X' z- R#系统空闲时间7 T& F1 U# i! s! T$ V
SYSTEM_IDLE=`echo ${NEXT_SYS_IDLE} ${LAST_SYS_IDLE} | awk '{print $1-$2}'`5 o- K; p$ \: a' U) J3 U* |
#CPU总时间
6 D, ]8 C# P# A) S, U) @' WTOTAL_TIME=`echo ${NEXT_TOTAL_CPU_T} ${LAST_TOTAL_CPU_T} | awk '{print $1-$2}'`
7 g/ ^; \% c8 b. `# yCPU_USAGE=`echo ${SYSTEM_IDLE} ${TOTAL_TIME} | awk '{printf "%.2f", 100-$1/$2*100}'`
! k8 f' @( v, o3 l+ n
3 h* _' H" g1 I4 F, recho "CPU Usage:${CPU_USAGE}%"0 d8 t" a* {1 h. Y' ~: b
# O0 `, J8 C- V5 t) }: z# c; Q4 d+ A
- {0 `* F9 v& ~3 a8 j
: z; d9 n; c1 o' h" y9 d
1 B5 o4 D( l5 t: s; E# R/ H! V7 [[devops@j_01 jinshantongji]$ top -bn 1 | grep 'Cpu(s)' | awk -F'[" "%]+' '{print $3}'' \: w$ p7 J6 q- Q0 }( b
14.9/ J5 a5 y- d& y% _' ^
[devops@j_01 jinshantongji]$ top -bn 1 | grep 'Cpu(s)'6 F5 i7 G& b" i& o5 m/ K" b
%Cpu(s): 20.3 us, 4.1 sy, 0.0 ni, 75.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st9 B7 t: D7 x2 A, M/ C3 f
[devops@j_01 jinshantongji]$ top -bn 1 | grep 'Cpu(s)' | awk -F'[" "%]+' '{print $3}'
( `( `# u- l' L- P+ w27.0
6 b' i; ^) L+ D; I
" Z v( E& f& R( ^ ^( v9 B' Afor循环脚本:
% H( T- w' h& p; Q" Y7 B, Qfor((i=1;i<=5;));
* ^: ?7 F) c, d1 bdo
+ H7 @5 F3 m$ I( G' Z$ V" w cpu_us=`top -bn 1 | grep 'Cpu(s)' | awk -F'[" "%]+' '{print $3}'`
& S; r$ |7 K) W8 _! m cpu_sy=`top -bn 1 | grep 'Cpu(s)' | awk -F'[" "%]+' '{print $5}'`, c* X+ Q3 \ x( W& C" O/ K% a
#echo $cpu_us
( X7 @. U- \1 W7 z! [ #echo $cpu_sy
6 B& c$ l o/ a% B8 K cpu_sum=$(echo "$cpu_us+$cpu_sy"|bc)
. g8 \3 i4 |: G7 Q3 c, Z0 ^ nowdate=$(date +"%Y-%m-%d %H:%M:%S")
6 e. X% A! m; i echo "$nowdate CPU_SUM: $cpu_sum%" >> ./cpu.log4 W; H/ c8 X6 v& T% m0 C" ]: E- W
sleep 120
( w- ^/ s& @: z+ l4 ^4 e, ydone' S$ Z- a2 R o2 J k( D* I
' K# b% R7 k6 F# N1 O
0 } c# T1 D: S1 J
. @+ [9 c# {# f4 K! }7 L. Hnohup sh cpu.sh >/dev/null 2>&1 &* P' M5 |% B: x' `; X& C. J5 x+ h
$ Z. u9 ^; k4 ^1 n9 [% \. S( W; A& Y/ {. [ {- O% b0 h
6 B; e& e) k4 e) |8 C
# S2 h4 q( t! Q5 c; u) s" D. R. \+ K, L5 e1 M+ o0 V
; }! j5 l% P7 o: T: }4 ?& K I) M: C7 b" E" c
|
|