影响的主要原因
1.整体系统的CPU利用率
2.内存的利用率
3.磁盘I/O的利用率和延迟
4.网络利用率
因素分析一:cpu
1.cup的执行速度和性能的好坏很大程度上决定了系统整体的性能快慢,在做系统分析性能分析前,首先要了解系统处理器的情况:逻辑处理器,处理器型号,主频率,chache大小,是否支持超线程技术等信息。
2.cpu的利用率也是很重要的关注指标,当cpu处于满负载的状态时,需要结合系统附带的一些监控分析工具,检查相关的日志系统,web服务器应用的日志,db日志等,结合辅助命令top,free,uptime,sar等辅助分析cpu为什么完全被占用,从而更好找到优化的方法。
3.应用监控工具,Java程序可以通过JVM自带命令工具(jstat,jmap,Jvisualvm,JConsole),MySql通过数据库监控工具(Spotlight,Monyog,以及命令行工具)来分析
因素分析二:内存
内存的大小也是影响系统性能的一个非常核心的指标,当内存太小,系统进程将会被阻塞,应用也会变得缓慢,有时候会失去响应或者触发OOM(内存溢出)从而引起应用程序被系统给杀死或者会引起系统的重启,这是时候可以做一些缓存服务器去提升体统的性能。
虚拟内存也是要考虑的一个因素,当系统的物理内存不够的时候,需要将物理内存中的一部分空间释放,临时保存到虚拟空间中,等程序运行的时候,在从虚拟内存中恢复和保存的物理内存中,这样当物理内存不够时,才能进行内存的交换。之前物理内存较小的情况下,一般建议是虚拟内存是物理内存的两倍,现在物理内存都较大,设置成两倍就有点浪费空间了。
可以使用top,free等获取系统内存使用数据
因素分析三:网络
需要考虑对应的网络是否可达,防火墙是否开启,端口的访问,带宽是否有被限制,路由的寻址,网络延时问题
因素分析四:I/O
访问中离不来系统的磁盘数据读写,I/O读写的性能会直接影响系统的性能,磁盘I/O是系统中最慢的部分,当I/O读写频繁时候,如果I/O得不到满足就会到导致应用的阻塞。针对I/O的场景模型,需要考虑IO的tps,平均I/O数据,平均队列长度,平均服务时间,IO利用率等指标
总结:
在性能测试的时候,这些单个因素之间彼此会互相影响互相依赖的,任何处在一个高负载的状态中,都可能导致其他资源受影响,比如1.大量的网络吞吐会导致CPU的资源增大,此时系统要分出去部分资源去进行软件中断处理 2.大量的CPU开销会尝试更多的内存使用,所以在进行系统优化查找瓶颈的真正所在是十分关键的,看似某一个资源处先问题,很有可能是其他原因导致的,可以通过vmstat命令进行资源的监控分析
我们需要确定应用类型并且分析当前的系统特点,多数系统对应的应用类型主要分为两类:
IO Bound(IO范畴):IO范畴的应用通常使用cpu资源都是为了产生IO请求以及进入到内核调度的sleep状态。通常数据库软件(mysql,orcle等)被认为是IO范畴的应用类型
CPU Bound(CPU 范畴):一般都是高负荷的cpu占用,CPU范畴的应用就是一个批量处理CPU请求以及数学计算的过程,通常是web server,mail server以及其他类型服务被任务是cpu范畴的应用类型。
系统的分析思路两种:自定向下,由应用程序往下分析;另一种是由底面向上,从操作系统资源往上分析到应用程序。
文章基于阅读与《Jmeter实战》一书,本次内容只是描述了性能测试的一些基本影响因素和解释,帮助新手对于性能测试有一定入门作用,对于具体的定位分析已经指标的监控,待续.......