架构

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。

user time指CPU在用户态执行进程的时间。

合理值:60-85%,如果在一个多用户系统中usr+sys时间超过85%,则进程可能要花时间在运行队列中等待,响应时间和业务吞吐量会受损害;usr过大,说明有用户进程占用很多cpu时间;sys过大,说明系统管理方面花了很多时间,说明该系统中某个子系统产生了瓶颈。

system time。指CPU在内核运行的时间。

合理值:60-85%

nice time指系统花费在调整进程优先级上的时间。

waiting time指CPU花费在等待I/O操作上的总时间。

参考值:小于25%。超过25%可能是磁盘密集工作负载的结果,系统的磁盘或其它I/O可能有问题,可以通过iostat/sar -C命令进一步分解分析。

idle time。系统处于空闲期,等待进程运行。

参考值:大于40。如果r经常大于4,且id经常小于40,表示cpu的负荷很重。

hardirq time系统在处理硬中断时候所花费的CPU时间。

softirq time系统在处理软中断时候所花费的CPU时间。

steal time指当前CPU被强制(involuntary wait)等待另外虚拟的CPU处理完毕时花费的时间。 

runq-sz运行进程队列的长度。对于可运行状态的进程个数的大小,这些进程在内存中准备就绪。

参考值:小于4,队列大于4时,表明系统的cpu或内存可能有问题,如果r经常大于4,且id经常少于40,表示cpu的负荷很重。当队列变长时,队列中进程在等待cpu调度执行时所花的时间会变长。

监控工具

lscpu

processor   : 0vendor_id   : GenuineIntelcpu family  : 6model       : 142model name  : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHzstepping    : 10microcode   : 0x96cpu MHz     : 700.120cache size  : 6144 KBphysical id : 0siblings    : 8core id     : 0cpu cores   : 4apicid      : 0initial apicid  : 0fpu     : yesfpu_exception   : yescpuid level : 22wp      : yesflags       : 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_l1dbugs        : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tfbogomips    : 3600.00clflush size    : 64cache_alignment : 64address sizes   : 39 bits physical, 48 bits virtualpower 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 ~]# toptop - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombieCpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%stMem: 625344k total, 571504k used, 53840k free, 65800k buffersSwap: 524280k total, 0k used, 524280k free, 409280k cachedPID   USER PR NI VIRT  RES  SHR S %CPU %MEM   TIME+ COMMAND19002 root 20  0 2656 1068  856 R  0.3  0.2 0:01.87 top1     root 20  0 2872 1416 1200 S  0.0  0.2 0:02.55 init

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/cpuinfo

CPU的基本信息

/proc/state

所有CPU活动的信息

/proc/<pid>/stat

某一进程所有的活动的信息

/proc/<pid>/task/<tid>/stat

 

某一进程所有的活动的信息

top

pidstat

[root@localhost ~]# pidstatLinux 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 Command11:23:19 PM 0 1 0.00 0.00 0.00 0.00 0 systemd11: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核心上的累积信息。

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

— END —

了解更多请加微信:kinnah333


文章TAG: