作为一名经常与Linux接触的挨踢人,在系统出现故障时,如何在最短的时间内找出问题所在,并迅速迅速修复显得尤为重要,那么在日常工作中有哪些工具能帮我们快速定位问题呢?总结一下,主要有以下这些:
uptime
[root@localhost ~]# uptime
16:16:52 up 1:13, 1 user, load average: 0.01, 0.00, 0.00
这个命令可以快速查看机器的负载。输出的结果分别表示1分钟、5分钟、15分钟系统的平均负载情况。通过这3个数据,可以快速了解该机器负载使用状态。
top
[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
[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
[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等。
iostat
[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
mpstat
[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的负载情况
pidstat
[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
[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
[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
[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
[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
[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
[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等。
本次分享到此结束,欢迎留言交流!