查看系统平均负载
1. $ uptime
2. 23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
这是一个快捷展示系统负载的命令。
上面的load average分别代表的是1分钟、15分钟和30分钟的系统平均负载。
这里的数字代表了等待CPU运行的进程数和被不可中断I/O阻塞的进程数。
如上面命令所示的情况来看,1分钟的平均负载明显高于15分钟的平均负载,这从侧面证明有事情正在发生。如果平均负载从右到左是逐级递减的,则说明登录机器查看问题的时间太迟,已经错过了。
查看系统日志
常用方法:
[root@192 ~]# dmesg | tail
[351102.316183] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[408985.586372] perf: interrupt took too long (41870 > 41842), lowering kernel.perf_event_max_sample_rate to 4000
[424458.796480] e1000: ens33 NIC Link is Down
[424462.802161] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[424466.814100] e1000: ens33 NIC Link is Down
[424470.823094] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[424492.874992] e1000: ens33 NIC Link is Down
[424498.887893] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[424502.899194] e1000: ens33 NIC Link is Down
[424508.911823] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
这里展示的是最近10条的系统消息日志,如果系统消息没有就不会展示。主要是看由于性能问题导致的错误。在排查问题时,该命令值得一用。
查看磁盘的性能详情
常用方法:
[root@192 ~]# iostat -xz 1
Linux 3.10.0-1062.el7.x86_64 (192.168.127.139) 10/26/2022 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.02 0.01 0.00 99.94
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.02 0.03 0.38 1.38 7.97 46.00 0.00 0.52 0.90 0.48 0.31 0.01
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.25 0.00 0.00 99.75
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 1.00 2.00 8.00 5.50 9.00 0.00 1.00 2.00 0.50 1.00 0.30
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 2.00 0.00 5.00 5.00 0.00 0.50 0.00 0.50 0.50 0.10
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 0.25 0.00 0.00 99.50
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 4.00 0.00 10.00 5.00 0.00 0.75 0.00 0.75 0.75 0.30
vmstat是一个常用命令,每行打印关键的服务信息统计摘要,这些统计数据统统来自/proc虚拟文件。
[root@192 ~]# 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
1 0 0 5710004 2072 1555216 0 0 0 2 13 25 0 0 100 0 0
0 0 0 5709988 2072 1555248 0 0 0 6 130 189 0 0 100 0 0
0 0 0 5709988 2072 1555248 0 0 0 0 70 129 0 0 100 0 0
0 0 0 5709988 2072 1555248 0 0 0 674 126 218 0 0 100 0 0
0 0 0 5709988 2072 1555248 0 0 0 15 125 204 0 0 100 0 0
查看各个CPU的时间统计,可以看出整体CPU的使用是不是均衡的。如果有一个使用率明显较高的CPU就可以看出来是一个单线程应用。
[root@192 ~]# mpstat -P ALL 1
Linux 3.10.0-1062.el7.x86_64 (192.168.127.139) 10/26/2022 _x86_64_ (4 CPU)
06:16:17 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
06:16:18 PM all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.75
06:16:18 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
06:16:18 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
06:16:18 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
06:16:18 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
类似top命令可以为每个CPU统计信息功能,但不像top那样每秒清屏会覆盖上一秒展示的内容,通过这个命令能更好的看清楚变化的趋势。
[root@192 ~]# pidstat 1
Linux 3.10.0-1062.el7.x86_64 (192.168.127.139) 10/26/2022 _x86_64_ (4 CPU)
06:19:28 PM UID PID %usr %system %guest %CPU CPU Command
06:19:29 PM 0 34854 0.00 0.97 0.00 0.97 0 pidstat
06:19:29 PM UID PID %usr %system %guest %CPU CPU Command
06:19:30 PM 0 1163 0.00 1.00 0.00 1.00 2 tuned
06:19:30 PM 1003 33293 1.00 0.00 0.00 1.00 1 zabbix_server
06:19:30 PM UID PID %usr %system %guest %CPU CPU Command
06:19:31 PM 0 34854 0.00 1.00 0.00 1.00 0 pidstat
06:19:31 PM UID PID %usr %system %guest %CPU CPU Command
06:19:32 PM 996 33377 1.00 0.00 0.00 1.00 1 mysqld
06:19:32 PM 0 34854 1.00 0.00 0.00 1.00 0 pidstat
06:19:32 PM UID PID %usr %system %guest %CPU CPU Command
06:19:33 PM 0 24191 0.00 1.00 0.00 1.00 0 kworker/0:1
06:19:33 PM 0 34854 0.00 1.00 0.00 1.00 0 pidstat
查看系统中运行的进程
常用:
ps -ef or ps -aux
查看内存的使用情况
[root@192 ~]# free -g
total used free shared buff/cache available
Mem: 7 0 5 0 1 6
Swap: 0 0 0
buffers: 用于块设备I/O缓冲的缓存
cached: 用于文件系统的页缓存
在查看主机剩余内存的情况只需要关注free就可以了,buffer和cache的占用是linux用空闲内存作为缓存,如果应用程序需要,可以快速拿回去。一般应用进程占用内存的比率超过70%就要考虑扩容了。
那什么是页缓存?
linux中页缓存的本质就是对于磁盘中的部分数据在内存中保留一定的副本,使得应用程序能够快速的读取到磁盘中相应的数据,并实现不同进程之间的数据共享。因此,linux中页缓存的引入主要是为了解决两类重要的问题:
1.磁盘读写速度较慢(ms 级别);
2.实现不同进程之间或者同一进程的前后不同部分之间对于数据的共享;
如果没有进程之间的共享机制,那么对于系统中所启动的所有进程在打开文件的时候都要将需要的数据从磁盘加载进物理内存空间,这样不仅造成了加载速度变慢(每次都从磁盘中读取数据),而且造成了物理内存的浪费。为了解决以上问题,linux操作系统使用了缓存机制。在虚拟内存机制出现以前,操作系统使用块缓存机制,但是在虚拟内存出现以后操作系统管理IO的粒度更大,因此采用了页缓存机制。此后,和后备存储的数据交互普遍以页为单位。页缓存是基于页的、面向文件的一种缓存机制。
查看系统整体磁盘使用情况
[root@192 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 20M 3.8G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda3 xfs 45G 11G 34G 25% /
/dev/sda1 xfs 297M 124M 173M 42% /boot
tmpfs tmpfs 781M 0 781M 0% /run/user/0
显示已载入系统的模块,通常会通过这个命令来查看系统中是否加载了某个模块。例如:
[root@192 ~]# lsmod |grep -i "xfs"
xfs 993020 2
libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
第一列是已加载模块名称、第二列是模块大小(单位字节)、第三列是依赖模块数(表示有多少其他模块依赖)、第四列是依赖本模块的模块名
查看系统监听端口的状态
[root@192 ~]# netstat -nplt
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:10051 0.0.0.0:* LISTEN 33267/zabbix_server
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1157/sshd
tcp6 0 0 :::10051 :::* LISTEN 33267/zabbix_server
tcp6 0 0 :::3306 :::* LISTEN 33377/mysqld
tcp6 0 0 :::80 :::* LISTEN 33521/httpd
tcp6 0 0 :::22 :::* LISTEN 1157/sshd
查看系统网络吞吐的接口
[root@192 ~]# sar -n DEV 1
Linux 3.10.0-1062.el7.x86_64 (192.168.127.139) 10/26/2022 _x86_64_ (4 CPU)
06:46:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:46:59 PM lo 2.00 2.00 0.17 0.17 0.00 0.00 0.00
06:46:59 PM br-aca9582efd46 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:46:59 PM ens33 1.00 3.00 0.11 0.20 0.00 0.00 0.00
06:46:59 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:46:59 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:47:00 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:47:00 PM br-aca9582efd46 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:47:00 PM ens33 6.00 8.00 0.40 1.02 0.00 0.00 0.00
06:47:00 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:47:00 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:47:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:47:01 PM br-aca9582efd46 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:47:01 PM ens33 5.94 7.92 0.40 1.00 0.00 0.00 0.00
06:47:01 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
rxkB/s和txkB/s,作为收发数据负载的度量,也是检测是否达到收发极限。
[root@192 ~]# sar -n TCP,ETCP 1
Linux 3.10.0-1062.el7.x86_64 (192.168.127.139) 10/26/2022 _x86_64_ (4 CPU)
06:50:08 PM active/s passive/s iseg/s oseg/s
06:50:09 PM 1.00 0.00 5.00 5.00
06:50:08 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
06:50:09 PM 0.00 0.00 0.00 0.00 0.00
06:50:09 PM active/s passive/s iseg/s oseg/s
06:50:10 PM 1.00 0.00 6.00 6.00
06:50:09 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
06:50:10 PM 0.00 0.00 0.00 0.00 0.00
对TCP关键指标的统计,含义如下:
active/s:每秒本地发起的TCP连接数(例如通过connect()发起的连接)
passive/s:每秒远程发起的连接数(例如通过accept()接受的连接)
retrans/s:每秒TCP重传数
查看系统连接数的命令,性能比netstat强(如果系统负载很高,netstat打开很慢,推荐用ss)。
ss -a 查看机器的socket连接数
ss -l 查看机器监听端口的情况
ss -s 查看机器的网络连接数
top 是比较全面的命令,但是它的一个缺陷也比较明显,很难看出变化趋势,其它像 vmstat 和 pidstat 这样的工具就会很清晰,它们是以滚动的
方式输出统计信息。