您现在的位置是:首页 >技术杂谈 >linux 性能60秒分析网站首页技术杂谈

linux 性能60秒分析

liao__ran 2025-03-06 00:01:02
简介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                                                       
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。