前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux常用性能与故障排查命令

Linux常用性能与故障排查命令

作者头像
用户5921339
发布2025-05-20 16:35:20
发布2025-05-20 16:35:20
14200
代码可运行
举报
运行总次数:0
代码可运行

作为一名经常与Linux接触的挨踢人,在系统出现故障时,如何在最短的时间内找出问题所在,并迅速迅速修复显得尤为重要,那么在日常工作中有哪些工具能帮我们快速定位问题呢?总结一下,主要有以下这些:

  • uptime
  • top
  • free
  • vmstat
  • iostat
  • mpstat
  • pidstat
  • netstat
  • ss
  • ifstat
  • iftop
  • lsof
  • sar

uptime

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# uptime
 16:16:52 up  1:13,  1 user,  load average: 0.01, 0.00, 0.00

这个命令可以快速查看机器的负载。输出的结果分别表示1分钟、5分钟、15分钟系统的平均负载情况。通过这3个数据,可以快速了解该机器负载使用状态。

top

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# top
top - 16:23:54 up  1:20,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 303 total,   1 running, 302 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us,  0.7 sy,  0.0 ni, 97.8 id,  0.0 wa,  0.3 hi,  0.2 si,  0.0 st
MiB Mem :   3704.6 total,   1275.2 free,   1369.6 used,   1059.7 buff/cache
MiB Swap:   4028.0 total,   4028.0 free,      0.0 used.   2072.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                         
   2933 root      20   0  764000  50084  35784 S   1.7   1.3   0:09.71 gnome-terminal-                                                 
   2471 root      20   0 3337228 188880 105260 S   1.3   5.0   0:38.73 gnome-shell                                                     
  35359 root      20   0  275444   5196   4172 R   0.7   0.1   0:00.35 top                                                             
   4074 root      20   0       0      0      0 I   0.3   0.0   0:00.60 kworker/u256:1-flush-253:0                                      
      1 root      20   0  176228  14508   8944 S   0.0   0.4   0:04.10 systemd                                                         
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.03 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   0:00.00 rcu_tasks_rude_

top命令可以实时动态查看系统各项性能指标,比如CPU使用情况、内存使用情况、负载情况、系统I/O等。top可以按照不通的指标进行排序,方便查找出诸如CPU使用率最高的进程、内存占用最多的进程等。

free

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       1.3Gi       1.2Gi        17Mi       1.0Gi       2.0Gi
Swap:         3.9Gi          0B       3.9Gi

free命令主要查看系统内存使用情况,-h参数表示以易读的方式显示。主要关注free这一列,便可知系统当前空闲内存,若交换区被使用的化,则会增加I/O开销,影响系统性能。

vmstat

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# vmstat 2 -w
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
 r  b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
 0  0            0      1306864        19964      1065524    0    0    75    22  124  169   1   1  98   0   0
 0  0            0      1306780        19964      1065524    0    0     0     0  209  292   0   1  99   0   0
 0  0            0      1306780        19964      1065524    0    0     0     0  163  234   0   1  99   0   0

vmstat命令会输出一些系统核心指标,如CPU、内存、I/O等。

  • r:等待CPU资源的进程数。如果这个数比CPU的核数大,那么就说明CPU资源已经饱和。
  • b:等待I/O的进程数
  • swpd:已经使用的交换内存(kb)
  • si:从磁盘交换到内存的交换页数据(kb/s)
  • so:从内存交换到磁盘的交换页数据(kb/s)
  • bi:单位时间发送到块设备的块数(block/s)
  • bo:单位时间从块设备接受的块数(block/s)
  • in:系统每秒中断数,包括时钟中断
  • cs:系统每秒上下文切换的次数
  • us:用户进程消耗CPU的时间(%)
  • sy:系统进程消耗CPU的时间(%)
  • id:CPU空闲时间(%)
  • wa:等待I/O消耗的CPU时间(%)
  • st:虚拟机获得的时间(%)

iostat

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# iostat -xz 1
Linux 4.18.0-372.9.1.el8.x86_64 (localhost.localdomain)   07/27/2022   _x86_64_  (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.04    0.01    2.84    2.10    0.00   94.01

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
sda             18.56    2.25    992.84    111.67     0.06     0.67   0.31  22.92    9.43    3.49   0.18    53.48    49.55   2.69   5.59
scd0             0.11    0.00      2.59      0.00     0.00     0.00   0.00   0.00    6.28    0.00   0.00    22.71     0.00   5.43   0.06
dm-0            16.73    2.87    929.49    109.09     0.00     0.00   0.00   0.00   10.10    3.53   0.18    55.57    37.95   2.81   5.51
dm-1             0.12    0.00      2.75      0.00     0.00     0.00   0.00   0.00    0.69    0.00   0.00    22.65     0.00   0.79   0.01
  • r/s:每秒完成读I/O的次数
  • w/s:每秒完成写I/O的次数
  • rkB/s:读取速率(KB/s)
  • wkB/s:写入速率(KB/s)
  • rrqm/s :每秒进行merge的读操作数目
  • wrqm/s :每秒进行merge的写操作数目
  • %rrqm:进行merge的读操作的占比
  • %wrqm:进行merge的写操作的占比
  • r_await:每个读操作平均所需的时间
  • w_await:每个写操作平均所需的时间
  • aqu-sz:
  • rareq-sz:平均每场设备I/O操作的数据大小(扇区)
  • wareq-sz:平均I/O队列长度
  • svctm:平均每次I/O操作的时间(毫秒)
  • %util:设备I/O消耗的CPU占比

mpstat

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# mpstat -P ALL 1
Linux 4.18.0-372.9.1.el8.x86_64 (localhost.localdomain)   07/27/2022   _x86_64_  (2 CPU)

04:21:56 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:21:57 PM  all    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
04:21:57 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
04:21:57 PM    1    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00

统计所有CPU中断
[root@localhost ~]# mpstat -I SUM -P ALL

mpstst可以显示每个CPU的负载情况

  • %nice:高优先级的进程占用CPU时间的百分比
  • %irq:硬中断占用CPU时间百分比
  • %soft:软中断占用CPU时间百分比
  • %steal:虚拟机强制CPU等待时间百分比
  • %guest:虚拟处理器占用CPU时间百分比
  • %gnice:高优先级虚拟处理器占用CPU时间百分比

pidstat

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# pidstat -u -p ALL
Linux 4.18.0-372.9.1.el8.x86_64 (localhost.localdomain)   07/27/2022   _x86_64_  (2 CPU)

04:38:07 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
04:38:07 PM     0         1    0.01    0.09    0.00    0.03    0.10     1  systemd
04:38:07 PM     0         2    0.00    0.00    0.00    0.00    0.00     1  kthreadd
04:38:07 PM     0         3    0.00    0.00    0.00    0.00    0.00     0  rcu_gp
04:38:07 PM     0         4    0.00    0.00    0.00    0.00    0.00     0  rcu_par_gp

显示进程占用内存情况
[root@localhost ~]# pidstat -r

pidstat命令可以查看各个进程占用CPU、内存、线程以及设备I/O等资源情况。

netstat

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1998/dnsmasq

netstat是控制台命令,对于监控TCP/IP网络非常实用,它可以显示路由表、网络连接、网络接口状态信息等信息。它能够统计IP、TCP、UDP和ICMP等相关协议的数据,常用于检查本机端口的使用情况。

ss

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# ss -tn
State                 Recv-Q            Send-Q                       Local Address:Port                         Peer Address:Port            Process            
CLOSE-WAIT            1                 0                              10.10.10.38:57432                           8.43.85.5:443                                

ss是socket statistcs的缩写,用于查看网络状态,它显示的内容和netstat类似,但是ss的优势在于它能够显示更多更详细的有关TCP连接状态的信息,而且比netstat更快。

ifstat

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# ifstat 
#kernel
Interface        RX Pkts/Rate    TX Pkts/Rate    RX Data/Rate    TX Data/Rate  
                 RX Errs/Drop    TX Errs/Drop    RX Over/Rate    TX Coll/Rate  
lo                     0 0             0 0             0 0             0 0      
                       0 0             0 0             0 0             0 0      
ens160                 8 0             8 0           632 0           528 0      
                       0 0             0 0             0 0             0 0      
virbr0                 0 0             0 0             0 0             0 0      
                       0 0             0 0             0 0             0 0

ifstat可以查看网卡的收发速率以及丢包情况

iftop

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# iftop -i ens160
                                12.5Kb                          25.0Kb                          37.5Kb                          50.0Kb                    62.5Kb
└───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────
localhost.localdomain                                              => 10.10.10.1                                                          480b    480b    436b
                                                                   <=                                                                     480b    480b    436b
localhost.localdomain                                              => _gateway                                                              0b      0b     76b
                                                                   <=                                                                       0b      0b    144b

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
TX:             cum:   1.38KB   peak:  1.28Kb                                                                                  rates:    480b    480b    512b
RX:                    1.56KB           2.02Kb                                                                                            480b    480b    581b
TOTAL:                 2.93KB           3.30Kb                                                                                            960b    960b   1.07Kb

iftop是Linux系统开源的网卡实时流量监控工具,它可以监控指定网卡的实时流量、端口连接信息、反向解析等,还可以精确显示主机TCP连接情况,非常适合监控代理服务器或路由器的网络流量。

lsof

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# lsof /usr/sbin/sshd 
COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
sshd    1222 root txt    REG  253,0   886344 2725415 /usr/sbin/sshd

[root@localhost ~]# lsof -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1222 root    5u  IPv4  33169      0t0  TCP *:ssh (LISTEN)
sshd    1222 root    7u  IPv6  33171      0t0  TCP *:ssh (LISTEN)

[root@localhost ~]# lsof /var/log/messages
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
rsyslogd 1462 root    5w   REG  253,0   246227 34721416 /var/log/messages

通过文件描述符查看messages的信息
[root@localhost ~]# cat /proc/1462/fd/5

lsof(list open files)是一个查看进程打开的文件的工具。在Linux环境下,一切皆文件,通过文件不仅可以访问常规数据,还可以访问网络连接和硬件。

sar

代码语言:javascript
代码运行次数:0
运行
复制
[root@localhost ~]# sar -n DEV 1
Linux 4.18.0-372.9.1.el8.x86_64 (localhost.localdomain)   07/27/2022   _x86_64_  (2 CPU)

05:15:41 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
05:15:42 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:15:42 PM    ens160      1.00      1.00      0.08      0.07      0.00      0.00      0.00      0.00
05:15:42 PM    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

[root@localhost ~]# sar -n TCP,ETCP 1
Linux 4.18.0-372.9.1.el8.x86_64 (localhost.localdomain)   07/27/2022   _x86_64_  (2 CPU)

05:17:53 PM  active/s passive/s    iseg/s    oseg/s
05:17:54 PM      0.00      0.00      0.00      0.00


[root@localhost ~]# sar -rh
Linux 4.18.0-372.9.1.el8.x86_64 (localhost.localdomain)   07/27/2022   _x86_64_  (2 CPU)

15:41:20     LINUX RESTART  (2 CPU)

03:50:11 PM kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
04:00:06 PM      1.6G      2.2G      2.0G     55.0%      4.2M    781.5M      3.1G     40.8%    322.1M      1.1G      0.0k
04:10:11 PM      1.6G      2.2G      2.0G     55.6%      4.2M    781.6M      3.1G     40.9%    322.5M      1.1G      0.0k
04:20:11 PM      1.6G      2.2G      2.0G     55.6%      4.2M    781.8M      3.1G     40.9%    322.6M      1.1G      0.0k
04:30:11 PM      1.6G      2.2G      2.0G     55.6%      4.2M    781.9M      3.1G     40.9%    322.8M      1.1G      0.0k
04:40:11 PM      1.6G      2.2G      2.0G     55.7%      4.2M    781.0M      3.1G     41.0%    322.9M      1.1G      0.0k
04:50:11 PM      1.6G      2.2G      2.0G     55.7%      4.2M    783.1M      3.1G     41.3%    323.8M      1.1G      0.0k
05:00:11 PM      1.6G      2.2G      2.0G     55.7%      4.2M    783.3M      3.1G     41.3%    323.9M      1.1G      0.0k
05:10:11 PM      1.5G      2.2G      2.1G     57.5%      5.2M    826.0M      3.1G     41.3%    331.9M      1.2G      0.0k
Average:         1.6G      2.2G      2.0G     55.8%      4.3M    787.5M      3.1G     41.1%    324.1M      1.1G      0.0k


[root@localhost ~]# sar -u
Linux 4.18.0-372.9.1.el8.x86_64 (localhost.localdomain)   07/27/2022   _x86_64_  (2 CPU)

15:41:20     LINUX RESTART  (2 CPU)

03:50:11 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:00:06 PM     all      0.28      0.00      0.88      0.00      0.00     98.84
04:10:11 PM     all      0.24      0.00      0.52      0.00      0.00     99.24
04:20:11 PM     all      0.07      0.00      0.28      0.01      0.00     99.63
04:30:11 PM     all      0.22      0.00      0.53      0.00      0.00     99.25
04:40:11 PM     all      0.34      0.00      0.61      0.00      0.00     99.05
04:50:11 PM     all      0.35      0.02      0.99      0.03      0.00     98.61
05:00:11 PM     all      0.12      0.00      0.39      0.00      0.00     99.49
05:10:11 PM     all      0.51      0.00      1.08      0.07      0.00     98.34
Average:        all      0.27      0.00      0.66      0.01      0.00     99.06

sar是一个功能十分强大的监控工具,因为其参数繁多,不禁让人望而生畏,从上面的输出可以看到,它能够显示前面介绍的几乎所有命令的结果,不论是CPU、内存、磁盘、网络、I/O等。

本次分享到此结束,欢迎留言交流!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT人家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档