p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'; min-height: 12.0px} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Heiti SC Light'} p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px} span.s1 {font: 12.0px 'Heiti SC Light'} span.s2 {font: 12.0px Helvetica} span.Apple-tab-span {white-space:pre}
uplooking 笔记 0611下午
优化
性能调优的原则
1,有目的调优,清楚要调整什么东西,指标
2,一次只对一个领域进行调优:对方网络,服务商之间问题,自己的带宽,请求处理,存储
3,每次只改动一个设置
4,至少用2个公司的测试分析软件(有推荐吗?ab命令在测试静态化页面很好,每次只能测试一个页面,不能模拟真实用户的使用,对动态话页面不靠谱不准确,webbanch可以定义脚本,可以模拟用户行为,webbanch本身性能不好,不能模拟大量用户,LR 很真实,贵;硬件 一台可以模拟20万用户。生成的报告的侧重点不一样, 。综合各家报告,折中
5,经验是最好的分析工具
6,知道什么时候该停下来,要有稳定性测试
方法
1,对性能描述的具体化:详细地描述出当前的性能情况是什么样子的:请求到server时间,处理时间(计算,db访问。。。),内容响应。补充:系统基础信息
2,折中的分析和调试,性能和稳定性,和成本;分析工具本身也是要占用资源(分析工具独立于系统之外)mysql enterprise monitor (server,agent,agent装在mysql proxy,分开机器,修改proxy配置,性能计算和统计在另外的机器上;
多种工具综合使用
工具,命令
1,top
统计信息区(mem-buffers,swap-cache)
top-当前时间 up 系统运行时间,登陆用户数,系统平均负载1分钟,5分钟,15分钟内 运行队列(等待放入cpu进程运算的进程,没有等待io操作结果的进程即数据都获取了,没有进程没有主动进入等待状态wait,进程没有被停止或被等待终止,满足以上3点,才可放入)里的平均进程数量,可观察一段时间内,cpu的繁忙程度
第2行:task 进程总算total,几个running,sleeping,stopped, zombie
cpu(s),用户空间us(ls 逻辑元算,搞软的),内核空间sy(真正读,向内核申请调用硬件,来硬的),用户进程空间内改变过优先级的进程占cpu的%(即改变过nis值的) ni,空闲cpu% id,等待io输入输出的cpu% wa,硬中断(向硬件发收信cpu需要中断下来处理)请求 hi,软中断请求 si,虚拟机处理时间st(不用管)
Mem 内存使用情况,(用free命令更准确一些),物理内存总量 total,已使用的内存总量(用free -m,第2行的used才是真正的用的内存数,used第一行=buffers+cached+第2行used,) used,第一行的free =第2行free-buffers-cache,第一行是真正的空闲空间。swap 的3项就是字面意思
buffer--相关程序运行支持的文件放的地方
cache--如果要读取外部资料,放在cache
进程统计区
PID:进程id
USER:用户名
PR:优先级 越大越好,符号是控制符号
NI:nice值,优先级,越负越高,-20~+20
用ni值决定谁先获得内存,如果nice相同看pr
VIRT:进程使用的虚拟内存的总量,单位是kb
RES:进程正在使用的未被换出的物理内存,没有被释放或换到swap的内存 virt=res+swap(?),
SHR:共享内存大小,kb
S:进程状态,s sleep,r run(cpu里正在运行的进程+运行队列的进程),z zombie,t trace或停止(一旦trace,系统发起要获取进程的状态,那么就停止),d 不可中断的睡眠
%CPU:top没3秒更新,从上次到现在使用率
%MEM:使用物理内存的%
TIME+:进程使用cpu的时间的总计 ,精确到0.01秒
TIME:进程使用cpu的时间的总计,精确到1秒
COMMAND:命令名
top使用方式 -d 制定刷新间隔,默认上3秒
-p 进程号
-i 不现实闲置或僵尸进程,只现实running的进程
交互式 按1,按k,按i,按R RESET NICE值,按f 添加现实选项,按o 调整现实顺序(shift+b,b向前向后调),c 切换现实命令名称,显示完整命令行,P 根据cpu使用的%进行排序,M根据内存使用多少
按回车立即刷新
W,保存当前设置 .toprc
========================
0612 linux瓶颈分析
cpu,mem,io,网络 一般是这4个方面
比如:
网卡接受大量数据包,会占用cpu,大量的cpu计算,可能占用大量的mem,大量的mem使用交换,又可能导致io(网卡质量好,占用cpu低)
是什么样特点的系统:
io密集(mem也多):数据库
cpu密集:大量运算,web服务器
什么情况下,算是出现了瓶颈?先需要一个基线系统,基准。可以通过mem角度观察,它是cpu和io的桥梁
用vmstat
cpu(调度中断《网卡送了数据包给内核,就是一个中断,cpu停止当前正在运行的进程和线程,换出,就是中断)和线程
内核空间(内核态):
用户空间(用户态):
2者对cpu的占用约是:3:7?(除去idle后的)(一般地,操作硬件的就是系统态)
上下文context切换,linux把每个core当做独立的处理器,处理50-50000线程,彼此切换,切入和切出就是 上下文切换
什么情况会引发上下文切换变多呢?优先级被提高,比如发现硬件中断,内存调入调出
如果当前线程数超过内核数,线程有被阻塞
cpu利用率,一般通过 us,sy,id,wa
还可以看看 load average
线程数是内核数的1-3倍
procs运行队列
r:当前运行队列里有多少线程,处于可运行,但是cpu还没有执行它们
b:block当前阻塞,并且等待io的进程
swpd:swap的大小
memory
buff
cache
(占在内存角度看东西的)
swap
si(从swap写到内存)
so(写入交换分区,swap out)
bi(从磁盘块读到内存)
bo(从内存到磁盘写出)
in(中断数,当前中断被处理的数目)
cs(上下文切换到恶数目)
us 用户态
sy 内核态
st 虚拟机
测试命令
dd if=/dev/zero of=/tmp/test.img bs=1M count=500
ab -n 1000000 -c 1000 http://19.../index.html
结论
r很多,b少
swap 没有
free在减少,减少的用在了cache里
siso没有
bi
pbflush' 每5秒写磁盘
bo每5秒高一点
in 中断多了30-40个
cs从200高到了10000,有大量的上下文切换,有很多计算
cs,sy 是1:1
计算密集型应用
io少
系统态的比较多,是因为网络数据包多(因为有ab在同一台机器上运行啊)
第2大 子系统 内存
oracle鼓励使用swap,用空间换性能
内存页概念:x86 是4kb,内存到磁盘就是写内存页
页交换:内存和swap
内存分页:内核把内存的数据同步到磁盘上,叫memory paging
kswpd?
负责 查看内存空闲情况,如果低于page_low,一次性释放32个页,重复直到空闲内存高于page_high
如果内存有修改,会写回磁盘
如果有修改,但是没有必要写回磁盘,就交换到swap
5秒写一次
pbflush:内存同步磁盘文件
和kswpd功能有点类似
脏页 缓存的数据比磁盘新,缓存中的数据叫做脏页
主要页错误:major page fails
次要页错误:
使用虚拟的内存层来映射(内存+swap),当进程被启动,cpu扫描在cpu高速缓存和物理内存,要去磁盘找,就是主要内存错误
如果物理内存有,写到cpu高速缓存,是次要页错误;高速缓存有,要写到物理内存,也是次要页错误
发现大量主要页错误:当前中断很大,内核态很高。bibo很高,调整程序等,使之消失,或转为次要错误
大量次要页错误:si so会很多,有很少的io,。。。原因是物理内存不够了
io子系统
最慢的部分,
品牌区别不是太大。sad inter的比较好,稳定性和兼容性还有茶具,文件系统支持也有待提高
文件缓冲区:内核把主要页错误最小化,次要页错误最大化。free很少,是系统在高效地使用内存。
3种内存页,
1,read pages,通过主要页错误,从磁盘读入内存
2,dirty pages,内存种修改过的内存页,由pbflush写到磁盘
3,anonimous pages,属于某个进程,但是没有任何磁盘文件和它有关,kswapd把它们交换到swap中去。
使用命令snyc,fsnyc'函数把脏页写到磁盘
监控软件:top,vmstat,iostat
学会计算IOPS。比如10000转yd,125io操作/秒
如果内存不足也可能产生随机读
从vmstat那些项目可以看出内存不足,大量的bi,free很少,so很多,wa很大,那么很明显是内存不足
如果有cpu等待io的情况,说明磁盘超负荷了
计算磁盘的iops,计算磁盘的能力
确定应用是随机的还是顺序的io
监控swap,系统分区,虚拟内存,确保虚拟内存不是瓶颈
监控磁盘,iostat不是rhce5,6 自带的
网络子系统:带宽不足,再接一个线
具体案例见pdf
性能评估的指标:
1,响应时间
用户响应时间:用户发送请求耗时(计算能力和带宽),用户联通isp的时间(直到flv起来,在线点播才发展),isp联通服务提供商的时间,到,内部系统响应时间(cpu计算周期,cpu cache大小,物理内存的速度和容量,存储设备io物理响应时间200iops,raid,NAS,SAN,操作系统线程和进程的处理能力,内核驱动模块的处理能力《raid卡的驱动卡,ku6 raid卡驱动是小厂商定制的,高20%》,事务响应时间《事务子licheng响应时间之和,进程和线程冲突调度时间,内存和swap调度时间,磁盘io冲突解决时间》
2,吞吐率
网络吞吐率:在线用户总数,并发总数(此刻同时访问),单位时间内数据包数
和io吞吐率:内存中靶率(内存和swap交换频率《变大,io压力大》,内存和。。),磁盘io(读文件,读block,写文件)
3,资源利用率
cpu,
内存,free buffer cache 看看比例
磁盘利用率 df 看看磁盘,df -i 看看inode的情况
另,例子:外贸网站
要考虑国外用户的响应时间:美国-中国有3根线,isp-isp,看看北美isp提供商《aol》,用户到isp的时间,客户机的性能忽略)
开发平台:java,数据库 ---系统响应时间
做一个代理服务器,甚至直接放在美国,但数据库要放在中国
吞吐率:
网络吞吐率:
在线学习系统:定期访问,高峰时期和普通网站不同,
经贸网站:并发量不高,要保证稳定性,但是带宽要求不高
io吞吐率:
资源利用率:
监控