常用性能分析命令
top
# 按大写的H,切换显示进程
?
# 按大写的E,切换展示Mem内存,和swap交换分区的单位
?
# 按小写的e,切换展示虚拟内存、物理内存、共享内存的单位
?
# 按n再按数字,比如4;展示占用进程最多的4个,输入0恢复全部的
task:zombie 僵尸进程
load average(系统平均负载): 过去1分钟、 过去5分钟、过去15分钟系统的平均负载
load average【系统的负载值】: CPU负载 + io负载
cpu使用率:说的是 系统所有cpu使用率之和,不管你多少cpu,它是一个整体所有cpu的总使用率, 不是单独某一个cpu的使用率。
所以,我们一般,不关心具体某一个 某一些cpu的使用率
-
cpu
-
wa:cpu再等待某些资源时间比(wa等待IO、CPU的时间)如果这个值很大,就要进一步考虑磁盘是否有问题了
- 可以通过iostat 进一步分析是磁盘读问题还是写的问题
- 写问题
- 数据库分区分表,写入到不同的磁盘上减轻磁盘的压力
- 磁盘矩阵、或者加磁盘(不到无法优化的时候不加)
读问题(磁盘更多出现的就是读问题)
- 首先看能不能优化SQL
- 增大buff(buff:缓冲区,是由磁盘虚拟出来,用于加快从磁盘读的速度)
- 磁盘矩阵
- 写问题
- 可以通过iostat 进一步分析是磁盘读问题还是写的问题
-
hi(hard interrupt)硬中断
- si(soft intertupt)软中断
-
buff/cache: 缓冲区/缓存
-
buff缓冲区,是磁盘上虚拟出来的一个空间,用于加快从磁盘读取数据的速度,不能加快写的速度
-
cache缓存, 内存缓存 cpu缓存,是加快数据的交换速度
swap 交换分区
-
由磁盘虚拟而来,一般是 内存条大小的 2 倍
-
swap分区,是用于临时存在内存中数据的, 在内存不足的时候,临时把内存中的数据,转移到swap服区暂存
进程列表中 PR 越小,优先级越高
-
VIRT、RES、SHR:进程的内存大小
-
virtual 虚拟的 VIRT 虚拟内存大小
-
res: 物理内存 这个进程所使用物理内存大小
-
share: 分享 共享内存
-
ps
ps -ef
ps -ef | grep # 进程名称
ps -ef |grep java
jps
ps -elf # 显示线程信息(不常用)
vmstat
监控显示 虚拟内存、进程、cpu活动进行监控

vmstat --help
vmstat [options] [delay [count]]
vmstat 1 5 # 间隔1秒,收集1次数据,总共收集5次,就会停止
-
procs 进程
-
r(runnable ):多少进程在等待,在运行队列中等待的进程数
-
如果这个r值很大,就说明目前有很多进程再等待cpu处理;如果这个值很大,同理,如果cpu的idea的值也很大,那说明目前cpu比较空闲,而造成r值的原因就是磁盘可能出现问题拉
-
这个数值和cpu的核数进行比较,大一点没问题,比如8核的;目前这个值是16,那说明分摊到每个CPU也就2个等待;如果是16核的,那分摊
到每个cpu也就1个等待
-
解决
-
1、增加cpu
-
2、减少进程/或线程(关闭一些没必要的服务-也可以把这台服务器的进程部署(迁出[移])到另外其它的服务器)、最后看代码能不能从多线程方面进行优化
-
-
-
b(blocked):多少进程在不可中断的休眠,在等待io的进程数
- 也可以理解为进程的阻塞
-
进程资源不被释放,随时都有可能被唤启,进行处理
-
通常意味着他们在等待io,例如磁盘,网络,用户输入,等等)
- swpd
- 表示过去交换分区使用的大小(也就是虚拟内存),交换分区是有磁盘虚拟出来的,当出现内存不足时用于临时存储内存的资源,所以swp如果大于0,则表示你的机器物理内存不足了(因为这个虚拟内存有数值了),如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
-
memory
-
swpd:多少块被换出到了磁盘(页面交换)
-
free 空闲,没有使用的内存
-
buff 缓冲区 从磁盘虚拟出来,用于存储一些数据,加快从磁盘读数据的速度
-
cache 缓存 cpu(L1,L2,L3)三级缓存、内存缓存,加快数据交换
-
-
swap 交换分区
-
si(input) 每秒有多少块正在被换入内存(从交换分区里面的资源换入到内存里面),从磁盘交换到内存的交换页数量(kb/s)
-
so (out) 正在被换出到磁盘(从内存交换到磁盘的交换页数据(kb/s))
-
-
io 磁盘的读写,单位KB/S,通常反映了硬盘I/O
-
bi (binary input) 从磁盘读的速度、显示了多少块从块设备读取,块设备是指系统上所有的磁盘和其他块设备
-
bo (binary out)写数据到磁盘的速率
-
-
system 系统
-
in(interrupt)中断
-
硬中断hi(hard interrupt)
-
软中断si(soft interrupt)
-
比如cpu读取内存里面的资源的时候,内存里面没有了,内存要去磁盘中获取,造成的一种中断
-
-
cs(Context Swich)上下文切换
-
自愿上下文
-
非自愿上下文
-
-
-
cpu
-
st:比如控制单元控制计算的所占用的管理时间
-
-
mpstat
实时监控工具,主要报告与cpu相关统计信息
yum install sysstat -y
# sysstat 性能分析工具包集,这个工具包中,有很多性能分析命令,大多带 stat sar
?
mpstat [ 选项 ] [ <时间间隔> [ <次数> ] ]
?
# 3秒获取一次所有的监控数据,-P {cpu l ALL},表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
mpstat -P ALL 3
?
mpstat 1 5 # 每间隔1秒钟,收集1次数据,总共收集5次,最后会给出一个平均值
-
%irq:硬中断时间
-
%soft:软中断时间
pidstat
监控全部或指定进程的cpu、内存、线程、设备io等资源占用情况和上下文切换信息
pidstat 1 5
# -u cpu
# -w(context swich) 显示每个进程的上下文切换情况
pidstat -u -w 1 3
cswch/s # 自愿上下文数据
nvcswch/s # 非自愿上下文数据
netstat(查看网络)
一般用于检验本机各端口的网络连接情况
-
-a 显示所有的socket连接
-
-n 用数字的方式显示连接
-
-p 进程
-
-
netstat -anp |grep "进程关键词或端口mysql 或 3306" 通过关键词过滤查找进程
-
iostat
显示设备,分区和网络文件系统的CPU统计信息和输入/输出统计信息

yum install sysstat -y
man iostat # 查看帮助
iostat 1 # 间隔1秒钟 收集1次磁盘的数据
iostat -c 1 # 间隔1秒钟,收集1次cpu的相关统计数据
iostat -dmx 1
-
Device: 磁盘(sd代表固态硬盘、hd代表机械硬盘)
-
rrqm/s 在磁盘上每秒读请求的大小
-
wrqm/s 对磁盘每秒进行的 写 操作的大小
-
r/s 每秒发送给磁盘的读的请求次数
-
w/s 每秒发送给磁盘的写的请求次数
-
rMB/s 每秒读多少数据
-
wMB/s 每秒写多少数据
-
avgrq-sz 请求的扇区数量
-
avgqu(queue)-sz 设备的等待请求数量也就是(等待请求队列)
-
svctm 请求的时间
-
dstat
-
是一个用例替换vmstat、iostat等命令的工具,功能比较全,有彩色的界面
-
是一个综合的命令
yum install dstat -y
?
dstat -cmdrylp
-c cpu
-m 内存
-d 磁盘
-r 换入换出
-y 系统
-p 进程
在使用linux性能分析命令来分析服务器性能情况时,一般,先用top、dstat命令,查看数据整体情况,发现有异常数据,然后,再使用具体的命令去发现异常数据