前言
平常工作会涉及到一些 Linux 性能分析的问题,因此决定总结一下常用的一些性能分析手段,仅供参考。
说到性能分析,基本上就是 CPU、内存、磁盘 IO 以及网络这几个部分。
已经整理过很多次了但还有地方不熟练,多练习多总结对比!
性能分析之CPU篇
进行性能分析之前,首先得知道 CPU 有哪些信息,可以通过以下方法查看 CPU配置信息。
cpu基本信息
lscpu
在 Linux 下,类似 lsxxx 这样的命令都是用来查看基本信息的,如 ls 查看当前目录文件信息,lscpu 就用来查看 CPU 信息,类似还有 lspci 查看 PCI 信息。
[root@master ~]# lscpu
Architecture: x86_64
架构:x86,64位
CPU op-mode(s): 32-bit, 64-bit
支持的模式:32位,64位
Byte Order: Little Endian
字节排序的模式:小端对齐(即低位字节排放在内存的低地址端,高位字节排放在内存的高地址端)
CPU(s): 1
逻辑CPU数:1
On-line CPU(s) list: 0
在线的cpu数量:0, 有故障或者过热时,某些CPU会停止运行而掉线
Thread(s) per core: 1
每个核心线程:1
Core(s) per socket: 1
每个cpu插槽核数/每颗物理cpu核数:1
Socket(s): 1
cpu插槽数,即物理cpu的数量:1
NUMA node(s): 1
有几个NUMA节点:1
Vendor ID: GenuineIntel
cpu厂商ID: GenuineIntel
CPU family: 6
厂商设定的CPU家族编号:6
Model: 142
型号:142
Model name: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
型号名称:Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
Stepping: 12
步进,可以理解为同一型号cpu的版本号:12
CPU MHz: 2304.003
cpu主频:2304.003
BogoMIPS: 4608.00
估算MIPS, MIPS是每秒百万条指令: 4608.00
Hypervisor vendor: VMware
虚拟化技术的提供商:VMware
Virtualization type: full
cpu支持的虚拟化技术的类型:full
L1d cache: 32K
一级高速缓存 dcache 用来存储数据:32k
L1i cache: 32K
一级高速缓存 icache 用来存储指令:32k
L2 cache: 256K
二级缓存:256k
L3 cache: 8192K
三级缓存:8192k
NUMA node0 CPU(s): 0
cpu在同一个numa节点node0上的个数:0
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
cpu支持的技术特征: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat spec_ctrl intel_stibp flush_l1d arch_capabilities
-
什么是NUMA(Non-Uniform MemoryAccess)?
中文名:分布式体系结构 (非统一内存体系结构)
与UMA不同,UMA是统一内存体系结构
UMA中,多个CPU访问内存是没有区别的,成本和速度相同。
而在NUMA中,可以看成每个CPU有自己的内存,被称为本地内存,
CPU之间通过一种方式连结,使得CPU可以访问非管辖范围内的内存(非本地内存)。
因为需要通过另一个通道获取,速度比访问本地内存要慢。
好处是这种方式增加了扩展性。
缺点是速度会受影响,对像mysql这类的数据库软件会有影响。 -
什么是大小端模式?
Byte Order: Little Endian
小端模式:低位的字节存储在地址较小的位置
大端模式:高位的字节存储在地址较小的位置 -
查看本地操作系统发行的版本
[root@master ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.6 (Maipo)
/proc/cpuinfo
/proc 目录是内核透传出来给用户态使用的,里面记录着很多信息文件,比如还有内存文件 meminfo 等。可以使用 cat /proc/cpuinfo 查看 CPU 信息。
[root@master ~]# cat /proc/cpuinfo
processor : 0
系统中逻辑处理核的编号。对于单核处理器,则可认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
stepping : 12
microcode : 0xca
Microcode打补丁是在SRAM上进行的,掉电以后就需要重新打补丁了,也就是说每次重启都要重新打补丁。打补丁的方式也很简单,就是把Microcode放在某个内存中,写个MSR就行了。
cpu MHz : 2304.001
cache size : 8192 KB
CPU三级缓存大小:8192 KB
physical id : 0
单个CPU的标号:0
siblings : 1
单个CPU逻辑物理核数:1
core id : 0
当前物理核在其所处CPU中的编号,这个编号不一定连续:0
cpu cores : 1
该逻辑核所处CPU的物理核数:1
apicid : 0
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
initial apicid : 0
fpu : yes
是否具有浮