
Linux 系统性能工具介绍
一、top
top命令能够实时显示系统中各个进程的资源占用情况
top的使用方式top [-d number] | top [-bnp]
-d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒
-b:以批次的方式执行top
-n:与-b结合使用,表示需要进行几次top命令的输出结果
-p:指定特定的pid进程号进行观察
顶部显示:
#top -b -bn1
top - 20:44:27 up 49 min, 5 users, load average: 0.25, 0.53, 0.75
Tasks: 262 total, 1 running, 261 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.2 us, 2.9 sy, 0.0 ni, 94.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 14993.3 total, 8004.5 free, 4331.1 used, 2657.6 buff/cache
MiB Swap: 65536.0 total, 65519.2 free, 16.8 used. 10238.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1335 adminis+ 20 0 5072108 510404 243480 S 12.5 3.3 3:03.71 firefox
1775 adminis+ 20 0 3284988 245536 139732 S 6.2 1.6 1:15.27 Web Content
解释:
# 第一行:
20:44:27 时间
up 系统运行的时间,格式为时分
users 当前系统登陆用户数
Looad average 系统负载,1/5/15分钟平均负载情况,如果这个数据高于逻辑cpu数,说明系统超符合运转
# 第二行:Tasks
total 进程总数
running 运行进程
sleeping 睡眠进程
stopped 停止进程
zombie 僵尸进程
# 第三行:%Cpu
us 用户空间占用cpu百分比
sys 内核空间占用cpu百分比
ni 用户进程空间内改变的优先级进程占用cpu百分比
id 空闲cpu占用百分比
wa 等待输入输出的cpu时间占用百分比
hi 硬中断占用cpu的百分比
si 软中断占用cpu的百分比
st 用于有虚拟机的情况,被虚拟机偷掉的百分比
# 第四行:MiB Mem
toal 物理内存总量
free 空闲内存总量
used 使用物理内存总量
buff/cache 用于内核缓存的内存量
# 第五行:Swap
total 交换区总量
free 空闲交换区总量
used 使用交换区总量
avail Mem 可用于进程下一次分配的物理内存数量
# 进程列表信息
PID 进程ID
USER 用户
PR 优先级
NI NICE值,负值表示高于优先级,正值表示低于优先级
VIRT 虚拟内存,单位kb。VIRT=SWAR + RES
RES 进程常驻内存,单位KB
SHR 共享内存,计算某个进程所占的物理内存大小公式:RES – SHR
CPU cpu使用率
MEM 内存使用率
TIME+ 进程使用CPU的时间统计,单位1/100秒
COMMAND 命令
# 快捷技巧
N – 以 PID 的大小的顺序排列表示进程列表
P – 以 CPU 占用率大小的顺序排列进程列表
M – 以内存占用率大小的顺序排列进程列表
h – 显示帮助
n – 设置在进程列表所显示进程的数量
二、iostat
基本使用:# iostat -d -k 1 10 查看TPS和吞吐量信息
#iostat -d -k 1 10
Linux 5.12.3-arch1-1 (opsxdev) 05/27/2021 _x86_64_ (8 CPU)
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
nvme0n1 1162.00 51812.00 7784.00 0.00 51812 7784 0
解释:
参数-d表示,显示设备使用状态,-k某些使用block为单位的列强制使用Kilobytes为单位;1 10 表示数据每隔1秒刷新一次,一共显示10批
tps 该设备每秒的传输次数,一次传输代表一次io请求,多个逻辑请求可能被合并为一次io请求,一次传输请求的大小是未知的
kB_read/s 每秒读
kB_wrtn/s 每秒写
kB_dscd/s
kB_read 读总数据量
kB_wrtn 写总数据量
高阶使用: # iostat -d -x -k 1 10 查看设备而使用率(%util)、响应时间(await)
#iostat -d -x -k 1 10
Linux 5.12.3-arch1-1 (opsxdev) 05/27/2021 _x86_64_ (8 CPU)
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 26.41 1098.67 6.52 19.79 0.22 41.60 9.13 861.08 8.79 49.04 4.83 94.29 0.00 0.00 0.00 0.00 0.00 0.00 0.60 0.55 0.05 1.95
解释:
r/s 每秒完成的读I/O设备次数
w/s 每秒完成的写I/O设备次数
rrqm/s 每秒这个设备相关的读取请求有多少被Merge了
wrqm/ 每秒这个设备相关的写请求有多少被Merge了
rkB/s 每秒读Kb字节数
wkB/s 每秒写kb字节数
avgrq-sz 平均每次设备I/O操作的数据大小
avgqu-sz 平均I/O队列长度
await 平均每次I/O操作的等待时间
svctm 平均每次设备I/O操作的服务时间
%util 在统计时间内所有处理IO时间
三、vmstat
-a 显示活跃和非活跃内存
-f 显示系统启动至今的fork数量
-m 显示slabinfo
-n 只在开始时显示一次各字段名称
-s 显示内存相关统计信息及多种系统活动数量
delay 刷新时间间隔,如果不指定,只显示一条结果
count 刷新次数,如果不指定刷新次数,但指定了时间间隔,这时刷新次数为无穷
-d 显示磁盘相关统计信息
-p 显示指定磁盘分区统计信息
-S 使用指定单位显示。参数有k,K,m,M分别代表不同的字节
vmstat 1 每秒输出一条结果
# 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
14 0 16896 1099240 287316 7067944 0 0 21128 12 10535 21987 69 6 25 0 0
解释:
# procs(进程):
r: 运行队列中进程数量,这个值可以判断是否需要增加CPU,长期大大于1
b: 等待IO的进程数量
# memory
swpd 使用虚拟内存大小
free 空闲物理内存
buff 用做缓冲的内存大小
cache 用作缓存的内存大小
# swap
si 每秒从交换区写到内存的大小,由磁盘调入内存
so 每秒写入交换区的内存大小,由内存调入磁盘
bi 每秒读取的块数
bo 每秒写入的块数
# system
in 每秒中断次数,包括时钟中断
cs 每秒上下文切换
# cpu
us 用户空间占用cpu的百分比
sy 内核空间占用cpu的百分比
id 空闲时间占用cpu的百分比
wa 读写io等待占用cpu的百分比
st 软中断占用cpu的百分比
四、磁盘IO排查思路
1.vmstat 1 10 查内存读写情况
2.iostat -x 1 检查磁盘读写情况
3.top -d 1查看应用负载
4.strace -p 查看应用执行动作