目录
Linux查询CPU信息
lscpu命令
Linux系统/proc文件中查询系统信息
CPU信息-cpuinfo
内存信息-meminfo
软中断信息-softirqs
硬中断信息-interrupts
CPU资源监控的数据信息
Linux系统中模拟上下文切换压力stress-ng
进程上下文切换
进程-使用top、vmstat 、pidstat观察服务器资源状态
线程上下文切换
线程-使用top、vmstat 、pidstat观察服务器资源状态
参考资料
CPU组成:运算器、控制器、寄存器
Architecture(架构): x86_64
CPU op-mode(s)(系统): 32-bit, 64-bit
CPU(s)(CPU数量): 1
Thread(s) per core(每个核的线程): 1
Core(s) per socket(每个插槽CPU核数): 1
[root@centos7 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
座: 1
NUMA 节点: 1
厂商 ID: GenuineIntel
CPU 系列: 6
型号: 165
型号名称: Intel(R) Core(TM) i7-10875H CPU @ 2.30GHz
步进: 2
CPU MHz: 2303.998
BogoMIPS: 4607.99
超管理器厂商: KVM
虚拟化类型: 完全
L1d 缓存: 32K
L1i 缓存: 32K
L2 缓存: 256K
L3 缓存: 16384K
NUMA 节点0 CPU: 0
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht sysc all nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x 2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase avx2 invpcid rdseed clflush opt md_clear flush_l1d arch_capabilities
[root@centos7 ~]#
每次系统启动成功,都会有系统启动的信息保存在,系统的内存文件中,存放位置/proc/cpuinfo
physical id:物理CPU
cpu cores:CPU的核数
processor:逻辑CPU
|wc -l:统计数量
|uniq:去重
|sort:排序
[root@centos7 proc]# cat cpuinfo
[root@centos7 proc]# cat cpuinfo |grep "physical id"
physical id : 0
[root@centos7 proc]# cat cpuinfo |grep "physical id" |uniq
physical id : 0
[root@centos7 proc]# cat cpuinfo |grep "physical id" |uniq |wc -l
1
MemTotal:总内存大小
MemFree:空闲内存大小(动态变动)
[root@centos7 proc]# cat meminfo
MemTotal: 1882092 kB
MemFree: 1599040 kB
MemAvailable: 1605044 kB
Buffers: 2108 kB
Cached: 134396 kB
SwapCached: 0 kB
Active: 91400 kB
Inactive: 93148 kB
Active(anon): 48312 kB
Inactive(anon): 8476 kB
Active(file): 43088 kB
Inactive(file): 84672 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Dirty: 20 kB
Writeback: 0 kB
AnonPages: 48040 kB
Mapped: 23116 kB
Shmem: 8744 kB
Slab: 41780 kB
SReclaimable: 18816 kB
SUnreclaim: 22964 kB
KernelStack: 1760 kB
PageTables: 4152 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3038192 kB
Committed_AS: 264932 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 29196 kB
VmallocChunk: 34359705600 kB
Percpu: 176 kB
HardwareCorrupted: 0 kB
AnonHugePages: 10240 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 53184 kB
DirectMap2M: 2043904 kB
[root@centos7 proc]# cat softirqs
CPU0
HI: 1
TIMER: 60014
NET_TX: 600
NET_RX: 24844
BLOCK: 7007
BLOCK_IOPOLL: 0
TASKLET: 71
SCHED: 0
HRTIMER: 0
RCU: 129184
[root@centos7 proc]# cat interrupts
CPU0
0: 138 IO-APIC-edge timer
1: 10 IO-APIC-edge i8042
8: 0 IO-APIC-edge rtc0
9: 0 IO-APIC-fasteoi acpi
12: 336 IO-APIC-edge i8042
14: 0 IO-APIC-edge ata_piix
15: 3038 IO-APIC-edge ata_piix
18: 2996 IO-APIC-fasteoi vmwgfx
19: 25308 IO-APIC-fasteoi enp0s3
21: 5710 IO-APIC-fasteoi 0000:00:0d.0, snd_intel8x0
22: 0 IO-APIC-fasteoi ohci_hcd:usb1
NMI: 0 Non-maskable interrupts
LOC: 112538 Local timer interrupts
SPU: 0 Spurious interrupts
PMI: 0 Performance monitoring interrupts
IWI: 5504 IRQ work interrupts
RTR: 0 APIC ICR read retries
RES: 0 Rescheduling interrupts
CAL: 0 Function call interrupts
TLB: 0 TLB shootdowns
TRM: 0 Thermal event interrupts
THR: 0 Threshold APIC interrupts
DFR: 0 Deferred Error APIC interrupts
MCE: 0 Machine check exceptions
MCP: 11 Machine check polls
ERR: 0
MIS: 0
PIN: 0 Posted-interrupt notification event
NPI: 0 Nested posted-interrupt event
PIW: 0 Posted-interrupt wakeup event
us |
用户态计算,占用CPU的时间比。(例如:运算简单的加减乘除的时间消耗) | 用户进程空间,未有改变过优先级的进程,占用CPU的百分比 |
sy | 系统态计算,占用CPU的时间比。(例如:操作打开系统文件动作的时间消耗) | 内核空间,占用CPU的百分比 |
ni | 进程优先级切换,占用CPU的时间比 | 用户进程空间,有改变过优先级的进程,占用CPU的百分比 |
wa | CPU等待资源,占用CPU的时间比。(等待,休息) | 空闲+等待IO的时间百分比 |
hi | hardware interrupt 硬件中断,占用CPU的时间比 | 硬件中断,占用CPU的时间比 |
si | software interrupt 软件中断,占用CPU的时间比 st:管理CPU任务,占用CPU的时间比 |
软件中断,占用CPU的时间比 |
st | 管理CPU任务,占用CPU的时间比。 | 虚拟化时被其他VM窃取时间的百分比 |
id | idle CPU空闲时间,占用CPU的时间比。 |
yum install -y epel-release.noarch && yum -y update
yum install -y stress-ng
[root@centos7 proc]# ((proc = `nproc`*10)); stress-ng --cpu $proc --pthread 1 --timeout 150
((proc = `nproc`*10)); stress-ng --cpu $proc --pthread 1 --timeout 150
((proc = `nproc`*10)),proc相当于定义了一个变量,然后赋值,且双括号以10进制计算
nproc :获取当前系统CPU数量
[root@centos7 proc]# nproc
1
pthread 1 :每个进程有少数个线程
timeout:运行多长时间结束,如果不加入timeout就会一直执行
top:系统负载非常高,us+sy达到100%,us系统态比sy用户态高
vmstat 1:proc 的r队列有CPU竞争,memory free有轻微变化,in,cs有明显变化,cs特别高
pidstat -w 1
cswch/s有1个自愿上下文切换数据比较大,而且每一个nvcswch/s非自愿上下文比较大,综合nvcswch/s稍微大一些
针对以上情况,可以说明:
综合上述数据得出:系统负载偏高,是由于非自愿上下文切换数据偏高,反映CPU资源不足;
所以解决办法如下:
模拟同一个进程,有20个线程,来回切换上下文
stress-ng --cpu `nproc` --pthread 20 --timeout 150
nproc :1cpu
pthread 20线程
top:系统负载非常高,load average比较大,负载高,且上升比较快,us,sy有数据,sy态尤其偏高,进程列表中CPU使用率也比较高,累计达100%
vmstat 1
vmstat 1:proc 的r队列有CPU竞争,memory内存有变化其中空闲内存有消耗,in,cs有明显变化,cs的数据比较大,cs比in的值要高
pidstat -w 1
cswch自愿上下文数据,大于nvcswch非自愿上下文切换的数据,非自愿上下文切换的数据相对较小
针对以上情况,可以说明:
综合上述数据得出:系统负载偏高,是由于自愿上下文切换数据偏高,反映CPU资源不足;
所以解决办法如下:
面试官:生产环境发生问题,你一般怎么排查?(Linux工具篇)_Java识堂的博客-CSDN博客
CPU上下文切换、进程上下文、中断上下文_土豆西瓜大芝麻的博客-CSDN博客_进程上下文切换运行在内核态
怒啃 24 小时,终于搞懂上下文切换! | HeapDump性能社区
Linux性能优化:CPU篇 - 知乎
性能瓶颈--CPU(上下文切换) - 简书