微信公众号:云计算通俗讲义
持续输出技术干货,欢迎关注!
通过本文你将了解:
架构
性能指标
监控工具
故障分析
架构
CPU架构主要包括桌面端和移动端两种。
对于桌面端,主要有Intel和AMD两家半导体厂商,2006年前主要是Intel 80386/80486等32位指令集,又称X86或8086,后来AMD推出64位指令集,又称AMD64/X86_64,该64位指令集兼容32位。
对于移动端,只有ARM(现已被GPU巨头NVIDIA收购)一家独大,2010年之前,ARM指令集包括ARMv1-v7系列,都是32位,2010年以后,调整为Contex系列,分为A系列(高端)、R系列(中端)、M系列(低端),称为ARM64指令。其中,我们熟悉的树莓派使用的是A系列芯片。
性能指标
CPU的工作时间由三部分组成:用户态时间、系统态时间和空闲态时间。具体的组成为:
CPU时间包含User time、System time、Nice time、Idle time、Waiting time、Hardirq time、Softirq time、Steal time。
用户态时间=User time+ Nice time。
内核态时间=System time+ Hardirq time+ Softirq time。
%usr
user time指CPU在用户态执行进程的时间。
合理值:60-85%,如果在一个多用户系统中usr+sys时间超过85%,则进程可能要花时间在运行队列中等待,响应时间和业务吞吐量会受损害;usr过大,说明有用户进程占用很多cpu时间;sys过大,说明系统管理方面花了很多时间,说明该系统中某个子系统产生了瓶颈。
%sys
system time。指CPU在内核运行的时间。
合理值:60-85%
%ni
nice time指系统花费在调整进程优先级上的时间。
%wa
waiting time指CPU花费在等待I/O操作上的总时间。
参考值:小于25%。超过25%可能是磁盘密集工作负载的结果,系统的磁盘或其它I/O可能有问题,可以通过iostat/sar -C命令进一步分解分析。
%id
idle time。系统处于空闲期,等待进程运行。
参考值:大于40。如果r经常大于4,且id经常小于40,表示cpu的负荷很重。
%hi
hardirq time系统在处理硬中断时候所花费的CPU时间。
%si
softirq time系统在处理软中断时候所花费的CPU时间。
%st
steal time指当前CPU被强制(involuntary wait)等待另外虚拟的CPU处理完毕时花费的时间。
r
runq-sz运行进程队列的长度。对于可运行状态的进程个数的大小,这些进程在内存中准备就绪。
参考值:小于4,队列大于4时,表明系统的cpu或内存可能有问题,如果r经常大于4,且id经常少于40,表示cpu的负荷很重。当队列变长时,队列中进程在等待cpu调度执行时所花的时间会变长。
监控工具
CPU信息
lscpu
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
stepping : 10
microcode : 0x96
cpu MHz : 700.120
cache size : 6144 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
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 pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp flush_l1d
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips : 3600.00
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
dmidecode
dmidecode -t processor
计算CPU的负载状况:uptime、top、sar、vmstat查看整体CPU负载,mpstat、dstat、bc可以查看整体或某个CPU的负载。
平均负载
uptime
展示最近一段时间的平均负载(5、10、15分钟性能展示)。
[root@localhost ~]# uptime 15:21:30 up 121 days, 3:00, 1 user, load average: 0.00, 0.00, 0.00
top
[root@localhost ~]# top
top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 625344k total, 571504k used, 53840k free, 65800k buffers
Swap: 524280k total, 0k used, 524280k free, 409280k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19002 root 20 0 2656 1068 856 R 0.3 0.2 0:01.87 top
1 root 20 0 2872 1416 1200 S 0.0 0.2 0:02.55 init
CPU使用率
sar
sar是System Activity Reporter的缩写,系统活动状态报告。
查看CPU状况:
sar -u
vmstat
vmstat 1 5
mpstat
mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。
在多CPU系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
mpstat 1 5
/proc/cpuinfo
/proc/cpuinfoCPU的基本信息
/proc/state所有CPU活动的信息
/proc/<pid>/stat某一进程所有的活动的信息
/proc/<pid>/task/<tid>/stat某一进程所有的活动的信息
进程CPU使用率
top
pidstat
[root@localhost ~]# pidstat
Linux 3.10.0-693.2.2.el7.x86_64 (jellythink) 01/11/2019 _x86_64_ (1 CPU)
11:23:19 PM UID PID %usr %system %guest %CPU CPU Command
11:23:19 PM 0 1 0.00 0.00 0.00 0.00 0 systemd
11:23:19 PM 0 2 0.00 0.00 0.00 0.00 0 kthreadd
pidstat用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。
pidstat的优势在于,可以滚动的打印进程运行情况,而不像top那样会清屏。
ps
top和ps可以以排序方式展示进程CPU,pidstat不可排序展示。
htop
top增强版。
atop
htop和atop则以不同颜色展示各种类型更直观。
系统上下文切换
vmstat
展示上下文切换、运行状态、不可中断状态进程数量。
进程上下文切换
pidstat
硬中断
top
查看软中断CPU利用率。
/proc/softirqs
/proc/softirqs和mpstat查看每个CPU上的累积信息。
mpstat
软中断
vmstate
查看总的中断次数信息。
/proc/interrupts
查看各种中断在每个CPU核心上的累积信息。
IO
dstat
[root@localhost ~]# dstat
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 99 0 0 0|7706B 164k| 0 0 | 0 0 | 189 225
0 0 100 0 0 0| 0 0 |4436B 826B| 0 0 | 195 248
1 0 99 0 0 0| 0 0 |4744B 346B| 0 0 | 203 242
0 0 100 0 0 0| 0 0 |5080B 346B| 0 0 | 206 242
0 1 99 0 0 0| 0 0 |5458B 444B| 0 0 | 214 244
1 0 99 0 0 0| 0 0 |5080B 346B| 0 0 | 208 242
sar
sar 1 3 或 sar -u 1 3
iostat
iostat -c 1 2
注:-c表示查看CPU,-d表示查看disk磁盘。
系统分析
perf
perf分析各种内核函数调用,热点函数信息。
优势在于与Linux Kernel的紧密结合,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。
execsnoop
监控短时进程。
故障分析
可以使用上述的性能分析工具排查CPU相关的故障,具体分析思路:
1、使用top获取系统整体CPU性能状况
2、vmstat或pidstat获取具体进程占用CPU状况
3、使用perf,strace,ps,pstack等工具分析进程的具体损耗
4、查看软硬件中断信息和负载状况,分析磁盘IO
网友评论