1 Star 1 Fork 0

巷雨微若 / betterPhper

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Linux性能分析.md 5.25 KB
一键复制 编辑 原始数据 按行查看 历史
yangqm 提交于 2023-06-07 16:12 . 1

Linux性能分析


系统负载=正在运行的进程数+等待运行的进程数, 对于CPU load averages,可以将该值除以 CPU 数量,如果该比率超过1.0,则表示正在运行饱和
load averages有三个值,分别表示1分钟,5分钟,15分钟的系统平均负载
load averages值的一些解释:
如果平均值为 0.0,意味着系统处于空闲状态 
如果 1min 平均值高于 5min 或 15min 平均值,则负载正在增加 
如果 1min 平均值低于 5min 或 15min 平均值,则负载正在减少 
如果它们高于系统 CPU 的数量,那么系统很可能会遇到性能问题(视情况而定)
观察工具
vmstat  #虚拟内存和物理内存的统计
mpstat  #每个CPU的使用情况
iostat  #每个磁盘I/O的使用情况
netstat #网络接口的统计
star    #各种各样的统计, 能归档历史数据
vmstat命令的使用
选项与参数:
-a #使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息;
-f #开机到目前为止,系统复制 (fork) 的程序数;
-s #将一些事件 (开机至目前为止) 导致的内存变化情况列表说明;
-S #后面可以接单位,让显示的数据有单位。例如 K/M 取代 Bytes 的容量;
-d #列出磁盘的读写总量统计表
-p #后面列出分区,可显示该分区的读写总量统计表
指标说明:
r     #等待运行中的程序数量;
b     #不可被唤醒的程序数量。r和b的值越大项目越,代表系统越忙碌
swpd  #虚拟内存被使用的容量; 
free  #未被使用的内存容量; 
buff  #用于缓冲内存; 
cache #用于高速缓存内存
si    #由磁盘中将程序取出的量, 
so    #由于内存不足而将没用到的程序写入到磁盘的swap的容量
bi    #由磁盘读入的区块数量; 
bo    #写入到磁盘去的区块数量。如果这部份的值越高,代表系统的 I/O 非常忙碌
in    #每秒被中断的程序次数; 
cs    #每秒钟进行的事件切换次数;这两个数值越大,代表系统与周边设备的沟通非常频繁! 
iostat命令的使用
使用示例:
iostat [-d] [-k] [device] [interval] [count]
选项与参数:
-d       #只显示磁盘I/O的统计信息, 而不是默认信息, 默认信息中包含CPU使用情况
-k         #按KB显示统计信息, 而不是按块显示    
-x         #显示扩展性能I/O统计信息    
device   #若指定设备,则只显示该设备信息
interval #采样间隔时间
count    #获取样本总数
统计信息:
tps          #每秒传输次数,该项为每秒对设备/分区读写的请求次数    
kb_read/s #每秒读取磁盘的数据量,单位为K
kb_wrtn/s #每秒写入磁盘的数据量,单位为K
kb_read   #在时间间隔内读取磁盘的数据总量
kb_wrtn   #在时间间隔内写入磁盘的数据总量
Device    #监测设备名称
rrqm/s    #每秒需要读取需求的数量
wrqm/s    #每秒需要写入需求的数量
r/s       #每秒实际读取需求的数量
w/s       #每秒实际写入需求的数量
rsec/s    #每秒读取区段的数量
wsec/s    #每秒写入区段的数量
rkB/s     #每秒实际读取的大小,单位为KB
wkB/s     #每秒实际写入的大小,单位为KB
avgrq-sz  #需求的平均大小区段
avgqu-sz  #需求的平均队列长度
await     #等待I/O平均的时间(milliseconds)
svctm     #I/O需求完成的平均时间
%util     #被I/O需求消耗的CPU百分比
CPI 即 Cycle Per Instruction的缩写,表示每指令周期数,是一个很重要的指标, CPI较高代表CPU经常陷入停滞, 通常都是在访问内存,而较低的CPI则代表CPU基本没有停滞, 指令吞吐量较高, 这些指标指明了性能调优的主要方向
用户态时间/内核态时间
计算密集的应用程序几乎会把大量时间用在用户态代码上,这类例子有图像处理,基因组学和数据分析,I/O密集的程序系统调用频率较高, 通过执行内核代码进行I/O操作, 例如一个进行网络I/O的Web服务器
CPU性能分析方法
uptime #检查负载平均数,负载平均数超过了CPU数量通常代表CPU饱和
vmstat #每秒运行vmstat,检查(id)空闲列的值是否少于10%,少于10%可能是个问题
mpstat #检查单个热点(繁忙)CPU, 挑出一个可能的线程扩展性问题
top/prstat #看看那个进程和用户是CPU消耗大户
pidstat/prstat #把CPU消耗大户分解成用户和系统时间
perf/dtrace/stap/oprofile #从用户时间或者系统时间刨析CPU使用的堆栈跟踪, 以了解为什么使用这么多CPU
perf/cpustat #测量CPI
mpstat命令的使用
使用示例:
mpstat [-p (cpu|All)] [interval] [count]
选项与参数:
-p(cput|ALL)  #告诉mpstat监控哪个CPU, CPU取值范围为0~(CPU总数-1)
interval      #指明mpstat在采样之间应该等待的时长    
count          #采样的次数
指标说明:
user    #在interval时间段里,消耗在用户态时间的百分比
nice    #在interval时间段里,nice值为负进程的CPU时间(%)占比
system  #在interval时间段里,消耗在内核态时间的百分比
iowait  #在interval时间段里,等待I/O消耗时间的百分比
irq        #处理软中断消耗时间的百分比
softirq    #处理硬中断消耗时间的百分比
idle    #CPU空闲时间百分比
PHP
1
https://gitee.com/null_488_0272/better-phper.git
git@gitee.com:null_488_0272/better-phper.git
null_488_0272
better-phper
betterPhper
master

搜索帮助