Linux常用性能监控命令
# Top
op命令可以显示当前系统的整体资源使用情况,并以动态的方式实时更新。在终端输入top命令后,可以看到CPU使用率、内存使用率、进程信息等,按q键可以退出
常用命令
# 每隔五秒刷新一次进程列表
top -d 5
# 只显示以root用户启动的进程
top -u root
# 只显示PID=1的进程
top -p 1
# 每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -p 12345 -p 6789
# 每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
top -d 2 -c -p 123456
# 使用 PID 字段降序排序
top -o -PID
# 使用 PID 字段降序排序
top -o -PID
# 不显示任何闲置 (idle) 或无用 (zombie) 的进程
top -i
# 每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -c
#执行top命令后,按 shift + f(小写)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1. Top返回结果说明
统计信息区其内容如下:前五行是系统整体的统计信息
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
2
3
4
5
6
7
8
9
10
11
12

# 第一行 任务队列信息,同 uptime 命令的执行结果
#当前系统运行相关 01:06:48 当前时间 up 1:22 系统运行时间,格式为时:分 1 user 当前登录用户数 load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值 #load average代表CPU的压力情况,如果负载值超过了当前系统CPU的逻辑核数,则表示CPU已经处理不过来了,此时会出现线程等待的情况1
2
3
4
5
6
7# 第二行 系统进程数状态
# 当有多个CPU时,这些内容可能会超过两行。内容如下: # 运行进程相关 Tasks: total 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数 stopped 停止的进程数 zombie 僵尸进程数1
2
3
4
5
6
7
8
# 第三行 CPU的信息
# 当有多个CPU时,这些内容可能会超过两行。内容如下: # CPU相关 Cpu(s): 0.3% us 用户空间占用CPU百分比 1.0% sy 内核空间占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 98.7% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0%hi: 硬件CPU中断占用百分比 0.0%si: 软中断占用百分比 0.0%st: 虚拟机占用百分比1
2
3
4
5
6
7
8
9
10
11
# 第四行 物理内存的使用情况
Mem: 191272k total 物理内存总量 173656k used 使用的物理内存总量 17616k free 空闲内存总量 22052k buffers 用作内核缓存的内存量1
2
3
4
5
# 第五行 交换分区内存的使用情况
Swap: 192772k total 交换区总量 0k used 使用的交换区总量 192772k free 空闲交换区总量 123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。1
2
3
4
5
# 第六行 进程信息区详情
#进程信息区统计信息区域的下方显示了各个进程的详细信息: 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.h1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 2. Top交互操作
常用交互操作
切换内存信息:m 切换名字和路径:c 切换显示进程和CPU状态信息:t 翻页:Shift+< 上翻 , Shift+> 下翻1
2
3
4
5
6
7其他实用交互操作
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
更改显示项目
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容 更改显示内容: 1、通过f键可以选择显示的内容 2、按方向键来选择项目 3、按d选择或者取消显示项目(被选择的会显示*号) 4、按ESC退出1
2
3
4
5
6
7更改排序顺序
1、按指定字段排序:top -o 字段名字,如: 按照内存排序:top -o %MEM 或者执行完top后,输入大写M 按照内存排序:top -o %CPU 或者执行完top后,输入大写P 按照内存排序:执行完top后,输入大写T 默认从大到小,大写R更改为从小到大排序 2、使用<>: shift+>:向右移动一列排序,比如现在是以CPU排序,那么输入>后就按照内存排序,输入R更改排序顺序,向右移动不了了,就表示以最右边的列排序。 shift+<:向左移动一列排序1
2
3
4
5
6
7
8
9
10过滤
1、过滤字符串 top -bc |grep name_of_process #过滤含字符串“name_of_process”的 2、过滤用户 执行top 指令,按下“u”,顶端出现:Which user (blank for all),输入要过滤的用户名即可 3、其他过滤 (表达式) 执行top 指令,按下“o”,顶端出现:add filter #1 (ignoring case) as: [!]FLD?VAL : 过滤用户则输入:USER=ceph 过滤command则输入:COMMAND=/opt/h3c/bin/python 过滤PID则输入:PID=32898481
2
3
4
5
6
7
8
9
10
11
# 3. top使用格式
top使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]1参数说明:
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 p 通过指定监控进程ID来仅仅监控某个进程的状态。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名1
2
3
4
5
6
7
# 4. 设置top执行几次|top信息写入文件
top -n 1 -b,-n表示执行多少次,-b表示可以重定向到文件中
top命令监控程序的输出信息和时间信息导入到文件中
#!/bin/bash
while [ 1 ]
do
top_print=`top -n 1 -b|grep mgc`
time=`date`
space=" "
print_str=$time$space$top_print
echo $print_str >> ./date.txt
sleep 3
done
# 其中top_print参数中使用grep,可以通过这个grep来过滤自己关心的程序信息记录下来
# top -n 1 -b,-n表示执行多少次,-b表示可以重定向到文件中
2
3
4
5
6
7
8
9
10
11
12
13
14
# sysstat系统性能监控
Linux Sysstat是linux系统免费提供用于收集主机性能的一个软件包,不是默认安装的,需要自己安装。
sysstat 是 Linux 系统中的常用工具包。它的主要用途是观察服务负载,比如CPU和内存的占用率、网络的使用率以及磁盘写入和读取速度等。
sysstat 工具包中包含两类工具:
即时查看工具:iostat、mpstat、sar
累计统计工具:sar
也就是说,sar 具有这两种功能。因此,sar 是 sysstat 中的核心工具
# 1. 包含的工具
| 工具名 | 作用 |
|---|---|
| iostat | 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息 |
| mpstat | 关于CPU的详细信息(单独输出或者分组输出) |
| pidstat | 关于运行中的进程/任务、CPU、内存等的统计信息 |
| sar | 保存并输出不同系统资源(CPU、内存、IO、网络、内核等)的详细信息 |
| sadc | 系统活动数据收集器,用于收集sar工具的后端数据 |
| sa1 | 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用 |
| sa2 | 配合sar工具使用,产生每日的摘要报告 |
| sadf | 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出 |
| sysstat | sysstat 工具包的 man 帮助页面。 |
| nfsiostat | NFS(Network File System)的I/O统计信息 |
| cifsiostat | CIFS(Co |
# 2. 安装sysstat
CentOS
# 通过yum安装 yum install sysstat # 通过rpm包安装-推荐rpm包方式安装,因为能随时安装最新版本 wget -c http://pagesperso-orange.fr/sebastien.godard/sysstat-11.7.3-1.x86_64.rpm sudo rpm -Uvh sysstat-11.7.3-1.x86_64.rpm # Ubuntu1
2
3
4
5
6
7
8
9Ubuntu
apt-get install sysstat1查看是否安装成功
#查看是否安装成功 mpstat -V sysstat version 9.0.4 (C) Sebastien Godard (sysstat <at> orange.fr)1
2
3
4
5
# 3. sar 命令
sar 命令是分析系统瓶颈的神器,可以用来查看 CPU 、内存、磁盘、网络等性能
具体详情:https://blog.csdn.net/bandaoyu/article/details/121169011
sar 命令的输出能够用于识别服务器瓶颈。但是,分析 sar 命令提供的信息可能比较困难,所以要使用 kSar 工具。kSar 工具可以将 sar 命令的输出绘制成基于时间周期的、易于理解的图表。
官网介绍:https://github.com/vlsi/ksar
sar 命令查看当前磁盘性能的命令为:sar -d -p 1 2
# 参数说明
-d 参数代表查看磁盘性能
-p 参数代表将 dev 设备按照 sda,sdb……名称显示
1 代表每隔1s采取一次数值
2 代表总共采取2次数值。
await 平均每次设备 I/O 操作的等待时间(以毫秒为单位)。
svctm 平均每次设备 I/O 操作的服务时间(以毫秒为单位)。
%util 一秒中有百分之几的时间用于 I/O 操作。
2
3
4
5
6
7
8
9
下面是命令执行的示例:
Linux 4.18.0-147.el8.x86_64 (ZHCP-jk) 05/13/2024 _x86_64_ (8 CPU)
11:02:42 AM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
11:02:43 AM vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:02:43 AM vdb 1.00 0.00 16.00 16.00 4.24 4239.00 1.00 0.10
11:02:43 AM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:02:43 AM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
11:02:44 AM vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:02:44 AM vdb 1.00 0.00 16.00 16.00 5.24 5239.00 1.00 0.10
11:02:44 AM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
Average: vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vdb 1.00 0.00 16.00 16.00 4.74 4739.00 1.00 0.10
Average: sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
对于磁盘 IO 性能,一般有如下评判标准:
正常情况下 svctm 应该是小于 await 值的,而 svctm 的大小和磁盘性能有关,CPU 、内存的负荷也会对 svctm 值造成影响,过多的请求也会间接的导致 svctm 值的增加。
await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
%util 项的值也是衡量磁盘 I/O 的一个重要指标,如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
默认情况下,sar从最近的0点0分开始显示数据;如果想继续查看一天前的报告;可以查看保存在/var/log/sa/下的sar日志:
[root@server-68.2.stage.polex.io var ]$ sar -d -p -f /var/log/sa/sa11 | more
Linux 4.18.0-147.el8.x86_64 (ZHCP-jk) 05/11/2024 _x86_64_ (8 CPU)
12:00:10 AM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
12:10:11 AM vda 0.25 0.00 3.13 12.37 0.00 5.51 0.68 0.02
12:10:11 AM vdb 6.90 0.81 65.27 9.58 0.00 0.82 0.60 0.41
12:10:11 AM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:20:11 AM vda 0.15 0.00 1.04 6.84 0.00 1.02 0.88 0.01
12:20:11 AM vdb 6.47 0.81 58.58 9.18 0.00 0.68 0.60 0.39
12:20:11 AM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:30:11 AM vda 0.15 0.00 1.02 6.89 0.00 1.04 0.88 0.01
12:30:11 AM vdb 6.66 0.81 61.33 9.34 0.00 0.68 0.59 0.40
12:30:11 AM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:40:11 AM vda 0.16 0.00 1.12 6.93 0.00 1.21 0.81 0.01
12:40:11 AM vdb 6.57 0.81 61.11 9.42 0.00 0.68 0.60 0.39
12:40:11 AM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:50:11 AM vda 0.25 0.00 1.71 6.92 0.00 1.03 0.61 0.02
12:50:11 AM vdb 6.50 0.81 58.35 9.10 0.00 0.67 0.60 0.39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 4. iostat 命令
iostat主要用于监控系统设备的 IO 负载情况,iostat 首次运行时显示自系统启动开始的各项统计信息,之后运行 iostat 将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
具体详情:https://blog.csdn.net/bandaoyu/article/details/121126446
命令格式:
iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ] [ -p [ device | ALL ] ] [ interval [ count ] ]1
2常用选项:
选项 说明 -c 仅显示CPU统计信息。与-d选项互斥 -d 仅显示磁盘统计信息。与-c选项互斥 -k 以KB为单位显示每秒的磁盘请求数。默认单位块 -m 以MB为单位显示每秒的磁盘请求数。默认单位块 -p {deviceALL} 用于显示块设备及系统分区的统计信息。与-x选项互斥 -t 在输出数据时,打印搜集数据的时间。 -V 打印版本号信息。 -x 输出扩展信息。 interval 为取样时间间隔 count 为输出次数,若指定了取样时间间隔且省略此项,将不断产生统计信息 常用命令:
# 每隔5秒显示一次设备吞吐率的统计信息(单位为 块/s) iostat -d 5 # 每隔5秒显示一次设备吞吐率的统计信息(单位为 KB/s),共输出3次 iostat -dk 5 3 # 每隔2秒显示一次 sda 及上面所有分区的统计信息,共输出5次 iostat -p sda 2 5 # 每隔2秒显示一次 sda 和 sdb 两个设备的扩展统计信息,共输出6次 iostat -x sda sdb 2 6 # -t是输出时间和日期,5是代表5秒一次,-x是详细情况都输出 iostat -t 5 -x > iostat.out # 查看磁盘压力 iostat -d -x1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17示例:
[root@ZHCP-jk ~]# iostat -x sda sdb 2 6 Linux 2.6.18-53.el5 (cnetos5) 01/21/2008 avg-cpu: %user %nice %system %iowait %steal %idle 0.10 0.04 0.37 0.07 0.00 99.42 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.17 0.84 0.96 0.47 16.67 10.56 19.01 0.01 7.11 1.25 0.18 sdb 0.00 0.00 0.01 0.00 0.07 0.00 5.16 0.00 0.22 0.19 0.001
2
3
4
5
6
7
8
9输出说明:
avg-cpu 部分输出项说明:
字段 说明 %user 在用户级别运行所使用的 CPU 的百分比。 %nice nice 操作所使用的 CPU 的百分比。 %system 在核心级别(kernel)运行所使用 CPU 的百分比。 %iowait CPU 等待硬件 I/O 所占用 CPU 的百分比。 %steal 当管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 %idle CPU 空闲时间的百分比。 Device 部分基本输出项说明:
字段 说明 tps 每秒钟物理设备的 I/O 传输总量。 Blk_read 读入的数据总量,单位为块。 Blk_wrtn 写入的数据总量,单位为块。 kB_read 读入的数据总量,单位为KB。 kB_wrtn 写入的数据总量,单位为KB。 MB_read 读入的数据总量,单位为MB。 MB_wrtn 写入的数据总量,单位为MB。 Blk_read/s 每秒从驱动器读入的数据量,单位为 块/s。 Blk_wrtn/s 每秒向驱动器写入的数据量,单位为 块/s。 kB_read/s 每秒从驱动器读入的数据量,单位为KB/s。 kB_wrtn/s 每秒向驱动器写入的数据量,单位为KB/s。 MB_read/s 每秒从驱动器读入的数据量,单位为MB/s。 MB_wrtn/s 每秒向驱动器写入的数据量,单位为MB/s。 Device 部分扩展输出项说明:
字段 说明 rrqm/s 将读入请求合并后,每秒发送到设备的读入请求数。 wrqm/s 将写入请求合并后,每秒发送到设备的写入请求数。 r/s 每秒发送到设备的读入请求数。 w/s 每秒发送到设备的写入请求数。 rsec/s 每秒从设备读入的扇区数。 wsec/s 每秒向设备写入的扇区数。 rkB/s 每秒从设备读入的数据量,单位为 KB/s。 wkB/s 每秒向设备写入的数据量,单位为 KB/s。 rMB/s 每秒从设备读入的数据量,单位为 MB/s。 wMB/s 每秒向设备写入的数据量,单位为 MB/s。 avgrq-sz 发送到设备的请求的平均大小,单位为扇区。 avgqu-sz 发送到设备的请求的平均队列长度。 await I/O请求平均执行时间。包括发送请求和执行的时间。单位为毫秒。 svctm 发送到设备的I/O请求的平均执行时间。单位为毫秒。 %util 在I/O请求发送到设备期间,占用CPU时间的百分比。用于显示设备的带宽利用率。当这个值接近100%时,表示设备带宽已经占满。
# 5. mpstat 命令
mpstat 输出每一个 CPU 的运行状况,为多处理器系统中的 CPU 利用率提供统计信息。
命令格式:
mpstat [ -P { cpu | ALL } ] [ -V ] [ interval [ count ] ]1常用选项:
选项 说明 -P {cpu|ALL} 指定 CPU。用 CPU-ID 指定,CPU-ID 是从0开始的,即第一个CPU为0。ALL 表示所有CPU。 -V 输出版本号信息。 interval 为取样时间间隔。指定0则输出自系统启动后的一个统计信息 count 为输出次数。若指定了取样时间间隔且省略此项,将不断产生统计信息 常用示例:
# 输出所有 CPU 使用情况的统计信息。 mpstat # 输出第一个 CPU 使用情况的统计信息。 mpstat -P 0 # 每隔2秒输出所有CPU的统计信息,共输出5次。 mpstat 2 5 # 每隔2秒输出一次所有CPU的统计信息,共输出5次。 mpstat -P ALL 2 5 # 每隔2秒输出一次第二个CPU的统计信息,共输出5次。 mpstat -P 1 2 51
2
3
4
5
6
7
8
9
10
11
12
13
14示例:
[root@ZHCP-jk ~]# mpstat Linux 2.6.18-53.el5 (cnetos5) 01/21/2008 10:39:06 AM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 10:39:06 AM all 0.10 0.04 0.31 0.06 0.04 0.01 0.00 99.45 1012.991
2
3
4
5输出项说明:
CPU 在多CPU系统里,每个CPU有一个ID号,第一个CPU为0。all表示统计信息为所有CPU的平均值。 %user 显示在用户级别运行所占用CPU总时间的百分比。 %nice 显示在用户级别,用于nice操作,所占用CPU总时间的百分比。 %sys 显示在kernel级别运行所占用CPU总时间的百分比。注意:这个值并不包括服务中断和softirq。 %iowait 显示用于等待I/O操作时,占用CPU总时间的百分比。 %irq 显示用于中断操作,占用CPU总时间的百分比。 %soft 显示用于softirq操作,占用CPU总时间的百分比。 %steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 %idle 显示CPU在空闲状态,占用CPU总时间的百分比。 intr/s 显示CPU每秒接收到的中断总数。
# 查看磁盘 IO 性能
注:除了上面的 sysstat 各种以外的命令
# 1. top 命令
top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 IO 过高等。
# 2. vmstat 命令
语法
vmstat [delay/count/d/D/t/w]1常用选项
选项 说明 delay 刷新时间间隔,单位是秒(如果没有指定,只显示一条结果) count 即输入刷新打印3次结果,如果没有指定刷新次数,但指定了刷新时间间隔,这时刷新次数就是不限制一直刷新直到手动停止。 **-d ** 磁盘 -D 磁盘总和 -t 时间戳,将时间戳附加到每一行 -w 宽输出模式,输出宽度大于80每行字符。 -S 显示单位 -V 版本信息 示例
[root@server-68.2.stage.polex.io var ]$ vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 0 93221488 4176 69117136 0 0 0 1 0 0 4 1 94 0 0 2 0 0 93226048 4176 69117128 0 0 0 0 33326 36671 18 2 80 0 0 1 0 0 93218776 4176 69117104 0 0 0 9 26225 21588 18 2 80 0 0 1 0 0 93226072 4176 69117072 0 0 0 0 13271 25857 5 0 94 0 0 0 0 0 93223984 4176 69117040 0 0 0 5 34637 24444 20 2 78 0 0 11 0 0 93219248 4176 69117184 0 0 0 0 30736 20671 8 2 90 0 01
2
3
4
5
6
7
8
9输出说明
字段 说明 r 可运行进程数(正在运行或等待运行时), 也就是说有真正分配给cpu的进程,如果r值大于cpu核数,出现cpu负载,就会有可能出现cpu瓶颈 b 阻塞等待I/O完成的进程数,当b大于0时,出现阻塞,一旦出现阻塞的话tps就不会很大,这个可以使用工具sar来查看tps实时值 swpd: 使用的交换内存量,当swpd值大于0时,说明服务器的物理内存不足,需要查看程序是否存在内存泄漏,如果确定不是的话需要增加服务器的物理内存 free 空闲内存量 buff 用作缓冲区的内存量 cache: 活动内存的数量 si(kb/秒) 从磁盘交换到内存的交换页数量(kb/秒),如果si值大于0,则表示物理内存不足或是内存泄漏 so(kb/秒) 从内存交换到磁盘的交换页数据(kb/秒),与si值一样,如果so值大于0,则表示物理内存不足或是内存泄漏 bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024 byte bo 块设备每秒发送的块数量,例如我们读取文件,bo 就要大于0。bi 和 bo 一般都要接近 0,不然就是 IO 过于频繁,需要调整 in 每秒的中断次数,包括时钟 cs 每秒上下文切换的次数,如调用系统函数,或是线程切换等都会引起上下文切换
# 测试磁盘 IO 性能
# 1. hdparm 命令
hdparm 命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数,注意该命令只能测试磁盘的读取速率。
测试 sda 磁盘的读取速率:
[root@server-68.2.stage.polex.io var ]$ hdparm -Tt /dev/polex_pv/varvol
/dev/polex_pv/varvol:
Timing cached reads: 15588 MB in 2.00 seconds = 7803.05 MB/sec
Timing buffered disk reads: 1128 MB in 3.01 seconds = 374.90 MB/sec
#从测试结果看出,带有缓存的读取速率为:7803.05MB/s ,磁盘的实际读取速率为:374.90 MB/s
2
3
4
5
6
7
# 2. dd 命令
Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
我们可以利用 dd 命令的复制功能,测试某个磁盘的 IO 性能,须要注意的是 dd 命令只能大致测出磁盘的 IO 性能,不是非常准确。
测试写性能命令:
[root@server-68.2.stage.polex.io var ]$ time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct 2+0 records in 2+0 records out 2147483648 bytes (2.1 GB) copied, 13.5487 s, 159 MB/s real 0m13.556s user 0m0.000s sys 0m0.888s1
2
3
4
5
6
7
8可以看到,该分区磁盘写入速率为 159M/s,其中:
/dev/zero 伪设备,会产生空字符流,对它不会产生 IO 。
if 参数用来指定 dd 命令读取的文件。
of 参数用来指定 dd 命令写入的文件。
bs 参数代表每次写入的块的大小。
count 参数用来指定写入的块的个数。
offlag=direc 参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache 。
测试读性能命令:
[root@server-68.2.stage.polex.io var ]$ dd if=test.file of=/dev/null iflag=direct 4194304+0 records in 4194304+0 records out 2147483648 bytes (2.1 GB) copied, 4.87976 s, 440 MB/s1
2
3
4看到,该分区的读取速率为 440MB/s
# 3. fio 命令
fio 命令是专门测试 iops 的命令,比 dd 命令准确,fio 命令的参数很多
详情:https://blog.csdn.net/bandaoyu/article/details/113190057
# 顺序读:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
# 随机写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
# 顺序写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
# 混合随机读写:
fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop
2
3
4
5
6
7
8
9
10
11