性能调优笔记(一)
一些 基本概念:
页面响应时间=网络延迟时间+应用延迟时间(数据库延迟时间+应用延迟时间)
影响性能的因素:
1.系统框架 2.操作系统等硬件因素3.中间件4.db5.应该程序
一版的 关系:
CPU进程等待 导致了 内存增加 导致 虚拟内存的增加 导致 词牌I/O开销增加
操作系统监控命令
vmstat sar iostat top free uptime netstat ps strace losf
性能评估的重要指标 :
cpu user%+sys%<70% :好 user%+sys%=85% :坏 usre%+sys%>=95%:糟糕
内存 Swap In/Out (si/so)=0 :好 Swap In/Out(si/so)=10 左右 :坏 大量的 Swap In和Swap Out :糟糕
磁盘 iowait%<20% :好 iowait%=35%:坏 iowait>=50%:糟糕
根据自身系统的特点来分析容易出现的 性能瓶颈:
当有大量读写操作的时候,属于IO Bound 范畴,一般会出现 IO瓶颈
当有大量的 cup运算,或者大量服务请求并要求返回处理值的时候,属于CUP Bound范畴,一版容易出现CPU瓶颈
————————————————————————————————————————————————————————————————————————————————
cup性能评估:
vmstat命令
各个参数的含义:
procs:
r:等待CPU运行的进程数,如果较多,说明cpu繁忙
b:处于不可中断的进程数,通常意味着这些进程在等待I/O,此值长期不为0的话 分析下原因
memory:
swpd: 总共使用的虚拟内存大小,如果此值较高或者不断增加,说明内存不够
free: 空闲的物理内存
buff: 用作缓冲的内存大小,用来存储目录,目录有什么,权限等
cache:用作缓冲内存大小,给文件内容作缓冲
swap:
si 每秒从磁盘写入swap虚拟内存块的数量,如果这个值大于0,说明物理内存不够用了,或者内存溢出了
so 每秒从swap虚拟内存写入磁盘块的数量,如果值大于0,说明物理内存不够用了,或者内存溢出了
bi 每秒发送给块设备的数量
bo 每秒从块设备接受的数量
bi+bo值过大,且 wa值过大,则表示遇到系统磁盘IO瓶颈
system
in 每秒中断数,包括时钟
cs 每秒的上下文切换数
这两个值越大,则由内核消耗的cpu就越多
cup
us:用于运行用户代码话费的百分比,us如果长期大于50%,则需要考虑优化程序或者算法
sy:用于运行核心代码话费的百分比
id:空闲的cpu百分比
wa:用于等待IO的百分比,wa值越高,说明I/O等待越严重(20%)
评估cup,主要关注r,us,sy,wa
问题一:
在一个多cpu的系统中,如果程序使用了单线程,会出现这么一个现象:cpu使用率不高,但是程序会非常卡的情况,单线程只会使用一个cpu,导致这个cpu占用率为100%,无法处理其他请求,而其他的cpu却闲置
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sar命令:
sar -u 查看cpu利用率
sar -v 进程,节点,文件和锁表状态
sar -d 硬盘使用报告
sar -r 系统内存使用报告
sar -n 显示网络运行状态
sar -B 内存分页情况
sar -q 显示运行队列的大小,他与系统当时的平均负载相同
sar -W 系统交换活动
------------------------------------
sar -u
%user 用户进程消耗的CPU时间百分比
%nice 运行正常进程消耗的CPU时间百分比
%system 系统进程消耗的CPU时间百分比
%iowait 1/O等待所占CPU的时间百分比
%idle CPU空闲状态的时间百分比
-------------------------------------
sar -r
kbbuffers =buffer
kbcached =cache
kbcommit =RAM+swap
commit% 比值
------------------------------------------------------------------------------
sar -B
pgpin/s:表示每秒从磁盘或swap写入到内存的字节数
pgpout/s:表示每秒从内存置换到磁盘或swap的字节数
------------------------------------------------------------------
要判断 cpu存在瓶颈 sar -u 和 sar -q
要判断内存存在瓶颈 sar -B sar -r 和 sar -W
要判断I/O存在瓶颈 sar -b ,sar -u ,sar-d
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
top命令:
-b :批次模式运行,通常用来将top的输出结果传送给其他程式或储存文件
-c :显示执行任务的命令行
-d :设定延迟时间
-h :帮助
-H :显示线程。
-i :显示空闲的进程
-n :执行次数,一版和-b搭配使用
-u :监控指定用户的相关进程
-U :监控置顶用户相关进程
-p :监控置顶的进程。当监控多个进程时,进程id以逗号分隔。这个选项只能在命令行下使用
-s :安全模式操作
-v :显示top版本,然后退出
-M :自动显示内存单位
top 交互命令
1.全局命令
回车,空格:刷新显示信息
?,h:帮助
=:移除所有任务显示的限制
A:交替显示模式切换
B:粗体显示切换
d,s:更改界面刷新时间间隔
G:选择其他窗口
I:Irix或Solaris模式切换
u,U:监控指定用户的相关进程
q:退出 top
r:重新设定进程的nice值
W:储存当前设定
Z:改变颜色模板
2.摘要区命令:
l:平均负载及系统运行时间显示开关
m:内存及交换空间使用率显示开关
t:当前任务及CPU状态显示开关
1:汇总显示cpu状态或分开显示每个CPU状态
3.任务区命令
外观样式
b:黑体/反色显示高亮的行列
x:高亮显示排序的列
y:高亮显示正在运行的任务
z:彩色/黑白显示、
显示内容:
c:任务执行的命令行或进程名称
f,o:增加和移除进程信息栏位及调整进程信息栏位的显示顺寻
H:显示线程
S:时间累计模式
u:监控置顶用户的相关进程
任务排序
M:按内存使用率排序
N:按PID排序
P:按CPU使用率排序
T:按Time+排序
pid:进程id
user:用户
PR:优先级
NI:nice值,负值表示高优先级,正直表示低优先级
VIRT:进程使用的虚拟内存总量
RES:进程使用的,未被换出的物理内存大小
SHR:共享内存大小
%cpu :cpu占用时间百分比
%MEM: 进程使用的物理内存百分比
TIME+:进程使用的cpu时间总计
COMMAND 命令名/命令行
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
ps 命令 查进程:
ps -aux|grep xxxx
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
netstat -ant |grep LISTEN 查看被监听的端口号
-------------------------------------------------------------------------------------------------------------------------------------------------------------------