利用sar工具确定系统性能瓶颈-超详细版

来源:互联网
更新时间:2016/12/12 2:47:47
责任编辑:王亮
字体:

安装

sar是查看操作系统报告指标的各种工具(top, vmstat...)中,最普遍,最方便的。它只是sysstat包中的一个工具,所以你必须安装sysstat包,可以去sysstat官网下载解压进行安装。

如果你下载的是tar.xz格式的话一般tar zxvf 是解压不了的,先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。然后就是传统的makefile安装了。

牛刀小试

sar 是后台进程sadc的前端显示工具,sadc会自动从内核收集报告并保存,不加任何选项可查看sadc过去收集的cpu使用率情况:

点击图片看大图学网 www.xue163.com

(如果报错,那是因为你没有建立/var/log/sa日期文件,你可以sar -o 来保存)

你还可以加-f去查看历史数据 , sar -f /var/log/sa04 | head,毕竟你没法及时到达案发现场-_-|||

不仅可以显示过去数据,sar还可以显示当前数据,加上数字参数,sar 1 5 每隔1s取一次,共5次

点击图片看大图

查看cpu使用率

参数解析

%user 用户模式下消耗的的cpu时间的比例;

%nice 通过nice改变进程调度优先级的进程,在用户模式下消耗的cpu时间的比例;--欢迎补充

%system 系统模式下消耗的cpu时间的比例;

%iowait cpu等待I/O而导致的空闲状态消耗时间的比例;

% steal 利用Xen等操作系统虚拟化技术时,等待其他虚拟CPU计算占用等时间比例;--不懂

% idle CPU没有等待磁盘I/O等的空闲状态消耗的时间比例;

在考虑负载均衡的时候,user system iowait idle值是重要指标[后续会详解]

平均负载

top 命令里会显示Load average 平均负载均衡值:

点击图片看大图

load average:0.07 0.11 0.08 从左到右分别是1分钟,5分钟,15分钟内,单位时间中处于等待状态的任务数,也就是报告了平均有多少个任务在等待,硬件每隔一定的周期给CPU发送中断信号,叫 定时中断,每次发生中断CPU就会进行与时间有关的计算与统计,平均负载值就是这个时候计算的,它计算就绪任务数和等待IO的任务数,其意义就是:

想要执行任务,却无法执行而不得不等待的的进程有多少,这些进程分为等待CPU的进程和等待IO完成的进程,所以光看平均负载值还是看不出是CPU还是IO的问题,但是平均负载越高说明运行有延迟,也就是负载过高。(当然宕机 拒绝服务等就不需要看数字了)

CPU密集型应用和IO密集型应用

根据前面负载可分两类:CPU负载和IO负载,一般来说应用服务器(后端服务器(发API的))从数据库中获得数据,加工后发送给客户端,很少有过多的IO操作(上传下载图片等会有专门的组件,如node 分布式文件服务器,cdn等处理),所以大多数应用服务器都是CPU密集型的,所以需要解决的负载主要就是CPU负载。

数据库服务器,是的,头疼的数据库服务器(因为工作时每次都要先ssh应用服务器,再从里面ssh到数据库服务器),不用说就是处理IO的,当数据规模变大时,IO大影响会远大于CPU,因此它是IO密集型服务器。

查找CPU瓶颈

平均负载过高,再用sar查看 CPU使用率 %user+%system 高的话,可确定为CPU资源不足,多核CPU可以用-P命令查看每个CPU的使用率以及其上的IO等待率,点击图片看大图

(我就分配了一个不用看了,)虽然CPU负载可以分散到其它CPU上,但是IO负载不行,所以IO优化很头疼。

而后你可以用ps看一下哪个进程发疯了,然后用strace跟踪,或者你也跟着发疯;如果没有问题,但是系统的吞吐量下降了,是否考虑一下优化算法或者再增加一台应用服务器去负载。

CPU负载解决

当一台tomcat不够用时,两台就行了,一般只要你的程序没有太奇葩,都以增加服务器来解决,一般的架构都是前端nginx做反向代理,后面跟个server group 一堆tomcat或别的什么,这是一个web站点在一开始就该考虑到的最基本的伸缩性需求(tomcat提供session分布式功能,不过现在有redis memcached等,ngnix也足够智能的知道哪些用户往哪些后端服务器发)。

查找IO瓶颈

平均负载值过高,且%iowait也过高的话,可以认为负载过高的原因为IO,IO负载过高,多半是程序发出的IO请求过多,或是发生页面交换导致频繁访问磁盘,通过sar确认交换区状态,找出原因

如果没有交换发生,而且磁盘IO频繁的情况,可能是缓存的内存不足(OS用LRU算法,缓存会经常更替,缓存不足时,命中率下降,更替明显,程序IO请求变多)。

下面就来确定是哪种:

sar -r 1 每秒输出一次当前内存状态

点击图片看大图

主要看 kbcached 用于缓存的容量,有278MB被用作缓存 %memused 内存利用率 92%,我的虚拟机1G内存,当读取大文件时,缓存会大大增加,不要差异,那是操作系统的缓存机制,所以还得看%iowait 看看多少进程在等待,最好的情况当然时降至最低了,增加内存可以加大缓存容量从而减少io等待,也就是增加内存可以减少IO负载(很合理,写SQL时也会经常考虑数据库缓存机制)

sar -w 查看页面交换发生情况 (本人小小虚拟机,没啥数据,大家想像一下吧--)

点击图片看大图

pswpin/s 每秒换入页数 pswpout/s 每秒换出页数,页面交换时服务器吞吐量会大大降低(IO等待率大大增高,由磁盘当话可能会卡卡响很大)

注意在可用内存(当然包括缓存)不足时(大数据处理),才会发生大量页面交换(虚拟内存机制的一个功能,在物理内存不足时,虚拟一部分磁盘空间当内存用)

IO负载均衡

如果是页面交换发生频繁的话,先用ps看看是否有进程消耗了大量的内存(是不是开了多个tomcat),是否有程序内存泄露,拖慢整系统,如果真是内存不足,那就增加内存(垂直扩展),并考虑分布式(分布式可用减少单机IO压力,可将读写分流等,各大数据库都提供集群功能);

果然是缓存不足,则增加内存,还不行就考虑缓存服务器吧,当然最先做的是改进程序减少IO请求。

总结

系统负载主要分为CPU负载和IO负载,分别对应应用服务器和数据库服务器

平均负载值过高+CPU使用率过高为CPU负载过高

平均负载值过高+iowait过高为IO负载

CPU负载高时 只需简单添加服务器就行

加大缓存可以减少IO负载

IO负载均衡比CPU负载均衡要难,因为要考虑数据的局部性,一般解决方法是主从复制模式(MYSQL)或者数据库分区(水平和垂直)

参考《大规模web服务开发技术》

这是我之前一直想总结的,因为种种原因拖欠至今,搞技术的还是要多总结总结的

www.xue163.com true /5/55144.html report 6006 利用sar工具确定系统性能瓶颈-超详细版,安装sar是查看操作系统报告指标的各种工具(top,vmstat...)中,最普遍,最方便的。它只是sysstat包中的一个工具,所以你必须安装sysstat包,可以去sysstat官网下载解压进行安装。如果你下载的是tar.xz格式的...
最近关注
首页推荐
热门图片
最新添加资讯
24小时热门资讯
精彩资讯
精彩推荐
热点推荐
真视界
精彩图片
社区精粹
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2016 Xue163.com All Rights Reserved. 学网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
荐闻 | 学网头条知识问答 | 装修 | 作业 | 荐闻 | 学网头条精彩微信 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 猎奇 | 精彩看点 | 图库 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 精彩微信 | 猎奇 | 精彩看点 | 图库编程 方案 信息windows方案windows answer文档机构教育文档问答中心IT编程数码信息解决方案信息中心IT科技