此偏文章为极客时间《Linux 性能优化实战》的其中一节课程内容总结,如有侵犯原作者著作权,请私信我删除
1、平均负载基本概念
2、实例分析
2.1、环境搭建
- 测试环境基于centos7.5版本
[root@domain ~]# uname -a
Linux domain 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
cpu架构信息
[root@domain ~]# lscpu
Architecture: x86_64 #架构--这里的64指的位处理器
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian #小端法
CPU(s): 4 #总处理器核心数量
On-line CPU(s) list: 0-3 #在线的cpu数量 有些时候为了省电或者过热的时候,某些CPU会停止运行
Thread(s) per core: 2 #每个核心支持的线程数量。1表示只支持一个线程,即不支持超线程
Core(s) per socket: 1 #每个插槽上有几个核心
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 58
Model name: Intel Xeon E3-12xx v2 (Ivy Bridge)
Stepping: 9
CPU MHz: 2099.998 #cpu主频
BogoMIPS: 4199.99 #MIPS是每秒百万条指令,Bogo是Bogus(伪)的意思,这里是估算MIPS值
Hypervisor vendor: KVM #cpu支持的虚拟化技术
Virtualization type: full
L1d cache: 32K #一级高速缓存 dcache 用来存储数据
L1i cache: 32K #一级高速缓存 icache 用来存储指令
L2 cache: 4096K
L3 cache: 16384K
NUMA node0 CPU(s): 0-3
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm fsgsbase tsc_adjust smep erms xsaveopt arat
内存信息
[root@domain ~]# free
total used free shared buff/cache available
Mem: 8008860 5627264 1436388 13556 945208 2086444
Swap: 4064252 0 4064252
-
-需要命令
stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。
mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。
4.案例一:
实现一:
1、模拟CPU 100%
[root@domain ~]# stress --cpu 1 --timeout 600
stress: info: [22018] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
2、uptime观察负载情况
# -d 参数表示高亮显示变化的区域
$ watch -d uptime
Every 2.0s: uptime Mon Dec 2 10:21:14 2019
10:21:14 up 2 days, 18:35, 4 users, load average: 1.05, 1.57, 1.84
#当前服务器时间: 10:21:14
#当前服务器运行时长 2 days, 18:35
#当前用户数 4 users
#当前的负载均衡 load average: 1.05, 1.57, 1.84,分别取1min,5min,15min的均值
3、mpstat 查看 CPU 使用率的变化情况
#-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
[root@domain ~]# mpstat -P ALL 5
Linux 3.10.0-957.5.1.el7.x86_64 (domain) 12/02/2019 _x86_64_ (4 CPU)
10:22:38 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:22:43 AM all 25.03 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 74.92
10:22:43 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10:22:43 AM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:22:43 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10:22:43 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
CPU 1 的使用率为 100%,但它的 iowait 只有 0。这说明,平均负载的升高正是由于 CPU 使用率为 100% 。
4、确定那个进程导致cpu升高
stress导致的cpu升高100%
[root@domain ~]# pidstat -u 5 1
Linux 3.10.0-957.5.1.el7.x86_64 (domain) 12/02/2019 _x86_64_ (4 CPU)
10:25:01 AM UID PID %usr %system %guest %CPU CPU Command
10:25:06 AM 0 16981 0.20 0.20 0.00 0.40 3 rsyslogd
10:25:06 AM 0 22019 100.00 0.00 0.00 100.00 1 stress
10:25:06 AM 0 22117 0.00 0.20 0.00 0.20 2 pidstat
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 0 16981 0.20 0.20 0.00 0.40 - rsyslogd
Average: 0 22019 100.00 0.00 0.00 100.00 - stress
Average: 0 22117 0.00 0.20 0.00 0.20 - pidstat
5、案例二:IO密集型进程
- 模拟 I/O 压力,即不停地执行 sync
stress -i 1 --timeout 600
- 观察那个进程导致cpu升高
[root@domain ~]# pidstat -u 5 1
Linux 3.10.0-957.5.1.el7.x86_64 (domain) 12/02/2019 _x86_64_ (4 CPU)
10:33:35 AM UID PID %usr %system %guest %CPU CPU Command
10:33:40 AM 0 16981 0.00 0.20 0.00 0.20 1 rsyslogd
10:33:40 AM 0 17889 0.00 13.17 0.00 13.17 2 kworker/u8:2
10:33:40 AM 0 22122 0.00 33.53 0.00 33.53 0 kworker/u8:1
10:33:40 AM 0 22293 0.60 66.67 0.00 67.27 1 stress
10:33:40 AM 0 22295 0.00 0.20 0.00 0.20 3 pidstat
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 0 16981 0.00 0.20 0.00 0.20 - rsyslogd
Average: 0 17889 0.00 13.17 0.00 13.17 - kworker/u8:2
Average: 0 22122 0.00 33.53 0.00 33.53 - kworker/u8:1
Average: 0 22293 0.60 66.67 0.00 67.27 - stress
Average: 0 22295 0.00 0.20 0.00 0.20 - pidstat
7、案例三:模拟大量进程场景
[root@domain ~]# stress -c 8 --timeout 600
stress: info: [22296] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd
[root@domain ~]# pidstat -u 5 1
Linux 3.10.0-957.5.1.el7.x86_64 (domain) 12/02/2019 _x86_64_ (4 CPU)
10:36:15 AM UID PID %usr %system %guest %CPU CPU Command
10:36:20 AM 0 22307 48.91 0.00 0.00 48.91 0 stress
10:36:20 AM 0 22308 49.70 0.00 0.00 49.70 1 stress
10:36:20 AM 0 22309 49.11 0.00 0.00 49.11 1 stress
10:36:20 AM 0 22310 50.69 0.00 0.00 50.69 3 stress
10:36:20 AM 0 22311 50.50 0.00 0.00 50.50 2 stress
10:36:20 AM 0 22312 49.50 0.00 0.00 49.50 3 stress
10:36:20 AM 0 22313 48.91 0.00 0.00 48.91 0 stress
10:36:20 AM 0 22314 49.70 0.00 0.00 49.70 0 stress
10:36:20 AM 0 22315 0.00 0.40 0.00 0.40 2 pidstat
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 0 22307 48.91 0.00 0.00 48.91 - stress
Average: 0 22308 49.70 0.00 0.00 49.70 - stress
Average: 0 22309 49.11 0.00 0.00 49.11 - stress
Average: 0 22310 50.69 0.00 0.00 50.69 - stress
Average: 0 22311 50.50 0.00 0.00 50.50 - stress
Average: 0 22312 49.50 0.00 0.00 49.50 - stress
Average: 0 22313 48.91 0.00 0.00 48.91 - stress
Average: 0 22314 49.70 0.00 0.00 49.70 - stress
Average: 0 22315 0.00 0.40 0.00 0.40 - pidstat