一、测试磁盘性能
1.创建测试目录
mkdir -p /home/test
2.使用dd测试
测试写入速度
# if=/dev/zero不产生IO,因此可以用来测试纯写速度
# 写入文件大小 = 8k * 500000 = 4G
time dd if=/dev/zero of=/home/test/out bs=8k oflag=direct count=500000
500000+0 records in
500000+0 records out
4096000000 bytes (4.1 GB) copied, 58.0348 s, 70.6 MB/s
real 0m58.065s
user 0m0.020s
sys 0m33.681s
测试读取速度
# of=/dev/null不产生IO,可以用来测试纯读速度
time dd if=/root/test/out of=/dev/null bs=8k
500000+0 records in
500000+0 records out
4096000000 bytes (4.1 GB) copied, 16.0882 s, 255 MB/s
real 0m16.090s
user 0m0.041s
sys 0m16.048s
3.测试过程中可以使用以下命令查看
利用vmstat命令,对读写性能进行说明。
vmstat 1 1 表示每隔1秒采集1次信息。
vmstat 1 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
19 0 507904 2225404 126816 15403456 0 0 1 25 0 1 10 1 89 0 0
描述:
io:显示磁盘读写状况
bi列:表示从块设备读入数据的总量(既读磁盘)(每秒kb)
bo列:表示写入到块设备的数据总量(既写磁盘)(每秒kb)
cpu:
wa列 表示i/o等待所占用的cpu时间百分比。
bi+bo参考值为1000,而且wa值较大,说明i/o等待越严重,则表示系统磁盘i/o有问题。
根据经验,wa的参考值为20%,如果wa超过了20%,可能是磁盘大量随机读写造成的i/o等待,也可能是磁盘磁盘控制器的带宽瓶颈造成的(主要是块操作)。
利用iostat -d 命令,对读写性能进行说明。
iostat -d 1 1 表示每隔1秒输出1次磁盘信息(不包含CPU信息)
iostat -d 1 1
Linux 3.10.0-1127.el7.x86_64 (airport-master) 2020年07月03日 _x86_64_ (48 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 0.00 0.00 0.00 4533 4
sdc 0.54 10.76 21.12 13034950 25592048
sda 8.14 14.14 1188.16 17136361 1439527064
dm-0 0.31 5.03 18.19 6098724 22037488
dm-1 0.65 0.46 2.14 559820 2588116
dm-2 0.09 5.24 0.80 6345596 964324
描述:
KB_read/s:表示每秒读取的数据块数
KB_wrtn/s:表示每秒写入的数据块数
KB_read:表示读取的所有块数
KB_wrtn:表示写入的所有块数
如果KB_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或优化程序;
如果KB_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
对于以上两个值没有一个固定的大小,但是数值长期的过大说明磁盘读写则不正常。
还有其他命令如 iotop、sar -d等,可查看其他文档
二、测试cpu性能
1.编写shell脚本
vim test-cpu.sh
#!/bin/bash
test_cpu(){
cat /dev/urandom | gzip -9 > /dev/null
}
case $1 in
-start)
for i in `seq $2`
do
test_cpu &
done;;
-stop)
ps -aux | grep "cat /dev/urandom" | awk '{print $2}' | xargs kill -9 2>/dev/null;;
esac
2.使用脚本
#开始测试
#第一个参数为“-start”,“-stop”。为开始和停止。
#第二个参数为开启线程数,“20”为同时开启20个线程。
bash ./test-cpu.sh -start 20
#结束测试
bash ./test-cpu.sh -stop
3.测试过程中可以使用以下命令查看
top命令
top
top - 10:37:35 up 25 days, 17:29, 1 user, load average: 0.00, 0.02, 0.05
Tasks: 104 total, 1 running, 103 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2067816k total, 2007264k used, 60552k free, 73752k buffers
Swap: 524284k total, 315424k used, 208860k free, 625832k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17827 root 20 0 700m 218m 13m S 1.7 10.8 0:42.81 java
4517 apache 20 0 1240m 359m 3884 S 0.7 17.8 20:44.91 java
2650 root 20 0 25588 2204 1224 S 0.3 0.1 12:43.61 snmpd
18076 root 20 0 2456 928 712 R 0.3 0.0 0:00.27 top
32645 root 20 0 798m 247m 3580 S 0.3 12.3 171:19.10 java
1 root 20 0 2208 100 84 S 0.0 0.0 0:31.34 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:09.87 ksoftirqd/0
5 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/u:0
多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况。
统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
10:37:35 当前时间
up 25 days, 17:29 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.00, 0.02, 0.05 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 104 total 进程总数
1 running 正在运行的进程数
103 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.1%us 用户空间占用CPU百分比
0.0%sy 内核空间占用CPU百分比
0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.9%id 空闲CPU百分比
0.0%wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si
0.0%st
最后两行为内存信息。内容如下:
Mem: 2067816k total 物理内存总量
2007264k used 使用的物理内存总量
60552k free 空闲内存总量
73752k buffers 用作内核缓存的内存量
Swap: 524284k total 交换区总量
315424k used 使用的交换区总量
208860k free 空闲交换区总量
625832k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
mpstat -P ALL 1命令
mpstat -P ALL 1
Linux 3.10.0-1062.el7.x86_64 (airport-slave01) 2020年07月03日 _x86_64_ (40 CPU)
10时06分43秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10时06分44秒 all 36.96 32.49 4.59 0.25 0.00 0.40 0.00 0.00 0.00 25.31
10时06分44秒 0 50.00 25.00 4.00 1.00 0.00 1.00 0.00 0.00 0.00 19.00
10时06分44秒 1 18.18 43.43 3.03 1.01 0.00 1.01 0.00 0.00 0.00 33.33
10时06分44秒 2 62.63 6.06 10.10 2.02 0.00 0.00 0.00 0.00 0.00 19.19
10时06分44秒 3 46.46 20.20 2.02 0.00 0.00 1.01 0.00 0.00 0.00 30.30
10时06分44秒 4 15.31 48.98 8.16 0.00 0.00 0.00 0.00 0.00 0.00 27.55
10时06分44秒 5 52.53 14.14 8.08 0.00 0.00 0.00 0.00 0.00 0.00 25.25
10时06分44秒 6 46.00 27.00 4.00 0.00 0.00 1.00 0.00 0.00 0.00 22.00
10时06分44秒 7 40.59 29.70 6.93 0.00 0.00 0.00 0.00 0.00 0.00 22.77
10时06分44秒 8 61.62 18.18 5.05 0.00 0.00 0.00 0.00 0.00 0.00 15.15
10时06分44秒 9 48.00 20.00 6.00 0.00 0.00 1.00 0.00 0.00 0.00 25.00
10时06分44秒 10 20.00 50.00 4.00 1.00 0.00 0.00 0.00 0.00 0.00 25.00
10时06分44秒 11 56.12 24.49 5.10 0.00 0.00 0.00 0.00 0.00 0.00 14.29
10时06分44秒 12 2.00 71.00 2.00 0.00 0.00 0.00 0.00 0.00 0.00 25.00
10时06分44秒 13 29.59 30.61 2.04 1.02 0.00 0.00 0.00 0.00 0.00 36.73
10时06分44秒 14 42.57 19.80 4.95 0.00 0.00 0.00 0.00 0.00 0.00 32.67
10时06分44秒 15 38.00 38.00 4.00 0.00 0.00 0.00 0.00 0.00 0.00 20.00
10时06分44秒 16 14.00 47.00 3.00 0.00 0.00 0.00 0.00 0.00 0.00 36.00
10时06分44秒 17 43.00 32.00 3.00 1.00 0.00 0.00 0.00 0.00 0.00 21.00
10时06分44秒 18 41.58 29.70 4.95 0.00 0.00 0.00 0.00 0.00 0.00 23.76
10时06分44秒 19 58.00 26.00 3.00 0.00 0.00 0.00 0.00 0.00 0.00 13.00
10时06分44秒 20 20.20 48.48 6.06 1.01 0.00 0.00 0.00 0.00 0.00 24.24
10时06分44秒 21 40.40 36.36 8.08 0.00 0.00 1.01 0.00 0.00 0.00 14.14
10时06分44秒 22 35.35 24.24 6.06 0.00 0.00 1.01 0.00 0.00 0.00 33.33
10时06分44秒 23 24.24 33.33 5.05 0.00 0.00 1.01 0.00 0.00 0.00 36.36
10时06分44秒 24 18.00 41.00 2.00 0.00 0.00 1.00 0.00 0.00 0.00 38.00
uptime 命令
uptime
10:10:12 up 13 days, 23:13, 3 users, load average: 20.77, 22.53, 24.19