您现在的位置是:首页 >技术杂谈 >linux 性能60秒分析网站首页技术杂谈
linux 性能60秒分析
简介linux 性能60秒分析
linux 60秒分析
- 需要运行的工具是
1、uptime
2、dmesg | tail
3、vmstat 1
4、mpstat -P ALL 1
5、pidstat 1
6、iostat -xz 1
7、free -m
8、sar -n DEV 1
9、sar -n TCP,ETCP 1
10、top
uptime
- 快速检查平均负载
[root@aaaaaa ~]# uptime
15:17:20 up 3 days, 14 min, 7 users, load average: 0.58, 0.88, 0.95
- 1分钟/5分钟/15分钟 负载
- 判断 性能问题是否还存在
- 较高的15分钟负载,较低的1分钟负载同时出现,需要排查的问题已经失效
dmesg |tail
- 显示过去10条系统日志
[root@aaaaaa ~]# dmesg |tail
[260546.491003] br-bff1beb338f3: port 4(vetha64d524) entered disabled state
[260546.577708] eth0: renamed from vethf286056
[260546.582137] IPv6: ADDRCONF(NETDEV_CHANGE): vetha64d524: link becomes ready
[260546.582280] br-bff1beb338f3: port 4(vetha64d524) entered blocking state
[260546.582281] br-bff1beb338f3: port 4(vetha64d524) entered forwarding state
[260546.691560] vethf286056: renamed from eth0
[260546.754205] br-bff1beb338f3: port 4(vetha64d524) entered disabled state
[260546.754745] br-bff1beb338f3: port 4(vetha64d524) entered disabled state
[260546.756142] device vetha64d524 left promiscuous mode
[260546.756157] br-bff1beb338f3: port 4(vetha64d524) entered disabled state
- 如果有问题,在这里可以寻找可能导致性能问题的错误,会有报错日志
- 根据报错的日志,然后定位下一步排查的方向
vmstat 1
- 虚拟内存统计工具
[root@aaaaaa ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 17271152 3200 9848856 0 0 4 42 16 31 1 3 97 0 0
1 0 0 17270972 3200 9848896 0 0 0 14 3490 5815 1 1 98 0 0
0 0 0 17270972 3200 9848896 0 0 0 40 3568 5930 1 2 98 0 0
1 0 0 17280152 3200 9848904 0 0 0 82 6250 10611 1 3 96 0 0
0 0 0 17284124 3200 9848904 0 0 0 20 4622 7903 1 2 97 0 0
0 0 0 17284188 3200 9848904 0 0 0 18 3482 5913 1 2 98 0 0
0 0 0 17283784 3200 9848904 0 0 0 38 3528 5929 1 2 97 0 0
0 0 0 17282672 3200 9849244 0 0 0 1787 6921 11595 2 8 90 0 0
0 0 0 17283444 3200 9849072 0 0 0 96 4047 7017 1 2 98 0 0
3 0 0 17306168 3200 9849080 0 0 0 348 4493 7280 1 3 96 0 0
- 第一行输出是自系统启动后的统计值,内存相关的计数器除外
- 需要检查的列如下
r:CPU上正在执行和等待执行的进程数量,r值比CPU多代表CPU资源处于饱和状态
free:空闲内存,单位是KB,数字越大,内存越宽松
si和so:页换人和页换出,值不为0则系统内存紧张,开启交换分区后才会起作用
us、sy、id、wa、st:用户态时间,系统态时间,空闲,等待I/O,被窃取时间(虚拟环境,被其他客户机挤占时间)
- 根据相应的数据,定位问题,比如CPU时间主要花费在用户态上,下一步主要针对用户态代码进行分析
mpstat -P ALL 1
- 将每个CPU分解到各个状态下的时间打印出来
[root@aaaaaa ~]# mpstat -P ALL 1
Linux 4.18.0-305.el8.x86_64 (aaaaaa.com) 07/25/2024 _x86_64_ (4 CPU)
03:49:34 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
03:49:35 PM all 0.76 0.00 1.53 0.00 0.51 0.51 0.00 0.00 0.00 96.69
03:49:35 PM 0 1.01 0.00 2.02 0.00 1.01 0.00 0.00 0.00 0.00 95.96
03:49:35 PM 1 0.00 0.00 2.06 0.00 1.03 0.00 0.00 0.00 0.00 96.91
03:49:35 PM 2 1.02 0.00 1.02 0.00 0.00 1.02 0.00 0.00 0.00 96.94
03:49:35 PM 3 1.01 0.00 1.01 0.00 0.00 1.01 0.00 0.00 0.00 96.97
- 假如CPU 0的用户态占比高达 100%,则是单个线程遇到瓶颈的特征
- 若是较高的 %iowait,需要使用磁盘I/O工具进一步分析
- 若是出现较高的 %sys值,可以使用系统调用syscall跟踪和内核跟踪,以及CPU剖析手段进一步分析
pidstat 1
- 按每个进程展示CPU的使用情况
[root@aaaaaa ~]# pidstat 1
Linux 4.18.0-305.el8.x86_64 (aaaaaa.com) 07/25/2024 _x86_64_ (4 CPU)
03:58:16 PM UID PID %usr %system %guest %wait %CPU CPU Command
03:58:17 PM 0 1153 0.00 0.99 0.00 0.00 0.99 3 containerd
03:58:17 PM 1003 1223 0.00 1.98 0.00 0.00 1.98 1 tikv-server
03:58:17 PM 1003 1227 3.96 5.94 0.00 0.00 9.90 3 pd-server
03:58:17 PM 1003 1229 0.99 1.98 0.00 0.00 2.97 0 tidb-server
03:58:17 PM 1003 1275 0.00 0.99 0.00 0.00 0.99 3 ng-monitoring-s
03:58:17 PM 0 1598 0.00 0.99 0.00 0.00 0.99 3 dockerd
03:58:17 PM 974 2592 0.99 0.99 0.00 0.00 1.98 3 engine
03:58:17 PM 0 4859 0.99 0.00 0.00 0.00 0.99 3 gvfs-udisks2-vo
03:58:17 PM 0 2198297 0.00 0.99 0.00 0.00 0.99 2 pidstat
03:58:17 PM UID PID %usr %system %guest %wait %CPU CPU Command
03:58:18 PM 1003 1223 0.00 2.00 0.00 0.00 2.00 1 tikv-server
03:58:18 PM 1003 1227 6.00 5.00 0.00 0.00 11.00 3 pd-server
03:58:18 PM 1003 1229 1.00 4.00 0.00 0.00 5.00 0 tidb-server
03:58:18 PM 1003 1275 0.00 1.00 0.00 0.00 1.00 3 ng-monitoring-s
03:58:18 PM UID PID %usr %system %guest %wait %CPU CPU Command
03:58:19 PM 1003 1223 0.00 3.00 0.00 0.00 3.00 1 tikv-server
03:58:19 PM 1003 1227 4.00 7.00 0.00 0.00 11.00 3 pd-server
03:58:19 PM 1003 1229 0.00 3.00 0.00 0.00 3.00 0 tidb-server
03:58:19 PM 0 2198297 0.00 1.00 0.00 0.00 1.00 2 pidstat
- 默认支持滚动打印输出,采集不同时间段的数据变化
- CPU的百分比是 全部CPU相加的和
iostat -xz 1
- 显示了存储设备的I/O指标
[root@iZt4n613wtbscz79890ik3Z grata]# iostat -xz 1
Linux 3.10.0-957.21.3.el7.x86_64 (iZt4n613wtbscz79890ik3Z) 07/25/2024 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.00 0.00 0.25 0.16 0.00 98.59
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 1.26 6.09 4.48 5.90 168.99 73.58 46.73 0.11 14.19 24.81 6.13 0.32 0.33
- 需要检查的列如下
r/s、w/s、rkB/s、wkB/s:每秒向设备返送的读、写次数,读、写字节数。
可以利用这些指标对业务负载进行画像来评判是否是性能问题
await:I/O的平均响应时间,毫秒为单位,应用需要承受的时间,包含I/O队列时间和服务时间。
超过预期的平局响应时间,可看作设备已饱和或者设备层面有问题的表征
avgqu-sz:设备请求队列的平均长度。比1大的值有可能是发生饱和的表征。
对于多块磁盘的虚拟设备来说,通常以并行的方式处理请求
%util:设备使用率。设备繁忙程度的百分比,显示了每秒设备开展实际工作的时间占比。
大于60%的值通常会导致性能变差,可以通过await字段确认
接近100%的值通常代表了设备达到饱和测状态
free -m
- 输出显示了使用兆字节(MB)作为单位的可用内存。
[root@aaaaaa ~]# free -m
total used free shared buff/cache available
Mem: 31933 5504 16624 374 9805 25604
Swap: 16127 0 16127
- 检查可以用内存 available 是否接近0
- 显示了系统中还有多少实际剩余内存可用,包括缓冲区和页缓存区
sar -n DEV 1
- 查看网络设备指标
[root@aaaaaa ~]# sar -n DEV 1
Linux 4.18.0-305.el8.x86_64 (aaaaaa.com) 07/25/2024 _x86_64_ (4 CPU)
05:36:45 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
05:36:46 PM veth0b422ee 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM vethf63044a 11.00 10.00 0.77 1.78 0.00 0.00 0.00 0.00
05:36:46 PM lo 211.00 211.00 81.49 81.49 0.00 0.00 0.00 0.00
05:36:46 PM veth013bc86 2.00 2.00 0.13 0.36 0.00 0.00 0.00 0.00
05:36:46 PM veth49c91fb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM br-bff1beb338f3 13.00 12.00 0.72 2.13 0.00 0.00 0.00 0.00
05:36:46 PM vetha675b99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM ens160 21.00 22.00 2.64 1.92 0.00 0.00 0.00 0.00
05:36:46 PM ens192 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM br-86e8f1f53da9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM veth046f110 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM vethdbf6265 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:46 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
05:36:47 PM veth0b422ee 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM vethf63044a 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM lo 279.00 279.00 61.36 61.36 0.00 0.00 0.00 0.00
05:36:47 PM veth013bc86 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM veth49c91fb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM br-bff1beb338f3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM vetha675b99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM ens160 15.00 17.00 1.18 3.72 0.00 0.00 0.00 0.00
05:36:47 PM ens192 1.00 0.00 0.06 0.00 0.00 0.00 0.00 0.00
05:36:47 PM br-86e8f1f53da9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM veth046f110 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:36:47 PM vethdbf6265 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- 通过接口吞吐量信息 rxkB/s 和 txkB/s 来检查是否有指标达到了上线
sar -n TCP,ETCP 1
- 查看TCP指标和TCP错误信息
[root@aaaaaa ~]# sar -n TCP,ETCP 1
Linux 4.18.0-305.el8.x86_64 (aaaaaa.com) 07/25/2024 _x86_64_ (4 CPU)
05:41:07 PM active/s passive/s iseg/s oseg/s
05:41:08 PM 0.00 0.00 207.00 207.00
05:41:07 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
05:41:08 PM 0.00 0.00 0.00 0.00 0.00
05:41:08 PM active/s passive/s iseg/s oseg/s
05:41:09 PM 0.00 0.00 243.00 243.00
05:41:08 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
05:41:09 PM 0.00 0.00 0.00 0.00 0.00
05:41:09 PM active/s passive/s iseg/s oseg/s
05:41:10 PM 0.00 0.00 190.00 190.00
05:41:09 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
05:41:10 PM 0.00 0.00 0.00 0.00 0.00
05:41:10 PM active/s passive/s iseg/s oseg/s
05:41:11 PM 0.00 0.00 250.00 250.00
- 相关字段解释
active/s:每秒本地发起的TCP连接的数量(通过connect()创建)
passive/s:每秒远端发起的TCP连接的数量(通过accept()创建)
retrans/s:每秒TCP重传的数量
- 主动和被动连接计数杜宇业务负载画像有作用
- 重传则是网络或者远端主机有问题的征兆
top
- 浏览系统和进程的摘要信息
top - 17:47:40 up 3 days, 2:45, 7 users, load average: 0.83, 1.01, 0.97
Tasks: 435 total, 1 running, 434 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 1.8 sy, 0.0 ni, 97.5 id, 0.0 wa, 0.3 hi, 0.2 si, 0.0 st
MiB Mem : 31934.0 total, 16631.2 free, 5485.8 used, 9816.9 buff/cache
MiB Swap: 16128.0 total, 16128.0 free, 0.0 used. 25622.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1227 tidb 20 0 11.1g 206420 60536 S 10.3 0.6 394:00.62 pd-server
1229 tidb 20 0 2295288 387072 96084 S 3.3 1.2 123:34.31 tidb-server
1223 tidb 20 0 3337544 1.8g 298936 S 2.3 5.8 92:52.60 tikv-server
1226 tidb 20 0 5368736 310792 65096 S 1.3 1.0 46:56.33 prometheus
1275 tidb 20 0 2211264 107928 34080 S 1.0 0.3 26:04.03 ng-monitoring-s
1039 root 20 0 370864 12792 10820 S 0.3 0.0 2:10.48 vmtoolsd
1222 tidb 20 0 123160 30944 14632 S 0.3 0.1 1:53.78 alertmanager
2592 collie 20 0 1797752 250376 38064 S 0.3 0.8 18:02.22 engine
1 root 20 0 250652 12788 8868 S 0.0 0.0 3:11.00 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.28 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 S 0.0 0.0 1:06.47 ksoftirqd/0
11 root 20 0 0 0 0 I 0.0 0.0 1:22.51 rcu_sched
12 root rt 0 0 0 0 S 0.0 0.0 0:00.79 migration/0
13 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
16 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/1
17 root rt 0 0 0 0 S 0.0 0.0 0:00.80 migration/1
18 root 20 0 0 0 0 S 0.0 0.0 0:18.96 ksoftirqd/1
20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2
22 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/2
23 root rt 0 0 0 0 S 0.0 0.0 0:00.82 migration/2
24 root 20 0 0 0 0 S 0.0 0.0 0:19.24 ksoftirqd/2
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。