Linux 常用系统性能测试命令

Linux 常用系统性能测试命令

此文档基于CentOS7编写。

一、CPU

1.top命令

[root@localhost ~]# top 

第1行:系统时间、运行时间、登录终端数、系统负载(3个数值分别为1分钟、5分钟、15分钟内的平均值)。

第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“99.9 id”意味着有99.9%的CPU处理器资源处于空闲。

第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。

第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。

2.mpstat

​ 用来查看CPU负载高的原因,mpstat命令写入每个可用处理器的标准输出活动,处理器0是第一个。还报告了所有处理器的全球平均活动。mpstat命令可以在SMP和UP机器上使用,但在后者中,只会打印全局平均活动。如果未选择任何活动,则默认报告为CPU利用率。

# 每1秒统计一次,统计三次。 [root@k8s ~]# mpstat -P ALL 1 3 

%user 在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 (usr/total)100
%nice 在internal时间段里,nice值为负进程的CPU时间(%) (nice/total)
100
%sys 在internal时间段里,内核时间(%) (system/total)100
%iowait 在internal时间段里,硬盘IO等待时间(%) (iowait/total)100
%irq 在internal时间段里,硬中断时间(%) (irq/total)100
%soft 在internal时间段里,软中断时间(%) (softirq/total)100
%idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)100

​ 机器一共有四个核心,所以每次显示的是4条记录,这里的输出主要看最后的Average数值。这是在没有负载的情况下机器的负载情况。

​ 指示要报告其统计信息的处理器编号。cpu是处理器编号。请注意,处理器0是第一个处理器。ON关键字表示要为每个联机处理器报告统计信息,而ALL关键字表示要为所有处理器报告统计信息。

测试一:增加系统IO

[root@k8s ~]# stress --io 1000 --timeout 600 stress: info: [84278] dispatching hogs: 0 cpu, 1000 io, 0 vm, 0 hdd 

这里可以看出系统在高IO的情况下,CPU的内核态占用很高,最后的空闲占的很少。

通过pidstat查看哪个进程对CPU的影响。

[root@k8s ~]# pidstat -u 3 5 

看哪个进程对CPU的影响。看%system列的占用情况,然后根据实际情况进行进程的动作。

测试二:增加cpu的计算采用大量线程

[root@k8s ~]# stress -c 4 --timeout 600 stress: info: [7634] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd 

​ 这里可以看出系统在大量进程的情况下,CPU的用户态占用很高,最后的空闲%idle占的很少。不管是内核态的升高还是用户态的升高都会导致系统空闲程度的下降。

通过pidstat查看哪个进程对CPU的影响。

[root@k8s ~]# pidstat -u 3 5 

看哪个进程对CPU的影响。看%usr列的占用情况,然后根据实际情况进行进程的动作。

二、内存

free -h

查看内存占用高的进程PID

[root@k8s ~]# ps aux | sort -n -k 3 -r|head 

三、磁盘

1.查看磁盘容量

会显示磁盘占用的空间量Use%如果有100%的就需要清理磁盘,一般从先从日志文件下手。

df -h 

# 显示操作系统文件系统 [root@localhost ~]# df -Th Filesystem              Type      Size  Used Avail Use% Mounted on devtmpfs                devtmpfs  979M     0  979M   0% /dev tmpfs                   tmpfs     991M     0  991M   0% /dev/shm tmpfs                   tmpfs     991M  9.6M  981M   1% /run tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup /dev/mapper/centos-root xfs        49G  1.8G   48G   4% / /dev/sda1               xfs      1014M  137M  878M  14% /boot tmpfs                   tmpfs     199M     0  199M   0% /run/user/0 

2.磁盘负载

# 所依耐安装包 yum -y install sysstat  iostat -dmx 1 3 # 每秒显示一次显示三次。 

# 常用参数  -d         # 显示设备(磁盘)使用状态 -c         # 只显示CPU行 -k         # 以千字节为单位显示磁盘输出 -m         # 以每秒兆字节为单位显示统计信息 -t         # 在输出中包括时间戳 -x         # 在输出中包括扩展的磁盘指标  rrqm/s: 每秒进行 merge 的读操作数目。 wrqm/s: 每秒进行 merge 的写操作数目。 r/s: 每秒完成的读 I/O 设备次数。 w/s: 每秒完成的写 I/O 设备次数。 rsec/s: 每秒读扇区数。 wsec/s: 每秒写扇区数。 rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算) wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算) avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。 avgqu-sz: 平均I/O队列长度。 await: 平均每次设备I/O操作的等待时间 (毫秒)。 svctm: 平均每次设备I/O操作的服务时间 (毫秒)。 %util: 一秒中有百分之多少的时间用于 I/O 操作。  关于Merge的解释:当系统调用需要读取数据的时 候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge  await:每一个IO请求的处理的平均时间(单位是毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。  %util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该 设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因 为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。 

四、网络测试

1.iperf3 测试网络带宽

# 服务端运行 [root@k8s ~]# iperf3 -s 

# 客户端运行 [root@k8s net]# iperf3 -c 10.4.7.10 

2.查看网卡是否有丢包

# 查看error字段 [root@k8s ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 10.4.7.10  netmask 255.255.255.0  broadcast 10.4.7.255         inet6 fe80::20c:29ff:fe78:a8e1  prefixlen 64  scopeid 0x20<link>         ether 00:0c:29:78:a8:e1  txqueuelen 1000  (Ethernet)         RX packets 23719  bytes 26537409 (25.3 MiB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 9663  bytes 1953840 (1.8 MiB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 
[root@k8s ~]# ethtool -S ens33 |grep -i error      rx_errors: 0      tx_errors: 0      rx_length_errors: 0      rx_over_errors: 0      rx_crc_errors: 0      rx_frame_errors: 0      rx_missed_errors: 0      tx_aborted_errors: 0      tx_carrier_errors: 0      tx_fifo_errors: 0      tx_heartbeat_errors: 0      tx_window_errors: 0      rx_long_length_errors: 0      rx_short_length_errors: 0      rx_align_errors: 0      rx_csum_offload_errors: 0  
[root@k8s ~]# ethtool ens33 Settings for ens33: 	Supported ports: [ TP ] 	Supported link modes:   10baseT/Half 10baseT/Full  	                        100baseT/Half 100baseT/Full  	                        1000baseT/Full  	Supported pause frame use: No 	Supports auto-negotiation: Yes 	Supported FEC modes: Not reported 	Advertised link modes:  10baseT/Half 10baseT/Full  	                        100baseT/Half 100baseT/Full  	                        1000baseT/Full  	Advertised pause frame use: No 	Advertised auto-negotiation: Yes 	Advertised FEC modes: Not reported 	Speed: 1000Mb/s 	Duplex: Full 	Port: Twisted Pair 	PHYAD: 0 	Transceiver: internal 	Auto-negotiation: on 	MDI-X: off (auto) 	Supports Wake-on: d 	Wake-on: d 	Current message level: 0x00000007 (7) 			       drv probe link 	Link detected: yes 	 # Speed: 1000Mb/s    # 网卡速率 # Duplex: Full       # 全双工 # Link detected: yes # 物理链路