性能测试知多少---性能分析与调优的原理

wenjing_cai wenjing_cai     2022-10-06     220

关键词:

最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP ),还是从应用程序代码,数据库调优,中间件配置等方面入手。

  单一个中间件又分web中间件(apache 、IIS),应用中间件(tomcat 、weblogic 、webSphere )等,虽然都是中间件,每一样拎出来往深了学都不是一朝一夕之功。但调优对于每一项的要求又不仅仅是“知道”或“会使用”这么简单。起码要达到“如何更好的使用”。

  常看到性能测试书中说,性能测试不单单是性能测试工程师一个人的事儿。需要DBA 、开发人员、运维人员的配合完成。但是在不少情况下性能测试是由性能测试人员独立完成的,退一步就算由其它人员的协助,了解系统架构的的各个模块对于自身的提高也有很大帮助,同进也更能得到别人的尊重。

 

  再说性能调优之前,我们有必要再提一下进行测试的目的,或者我们进行性能测试的初衷是什么?

能力验证:验证某系统在一定条件具有什么样的能力。

能力规划:如何使系统达到我们要求的性能能力。

应用程序诊断:比如内存泄漏,通过功能测试很难发现,但通过性能测试却很容易发现。

性能调优:满足用户需求,进一步进行系统分析找出瓶颈,优化瓶颈,提高系统整体性能。

 

 

 

一般系统的瓶颈                                                                                          

 

性能测试调优需要先发现瓶颈,那么系统一般会存在哪些瓶颈:

硬件上的性能瓶颈

一般指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。

 

应用软件上的性能瓶颈

一般指的是应用服务器、web 服务器等应用软件,还包括数据库系统。

例如:中间件weblogic 平台上配置的JDBC连接池的参数设置不合理,造成的瓶颈。

 

应用程序上的性能瓶颈

一般指的是开发人员新开发出来的应用程序。

例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够),造成系统在大量用户方位时性能低下而造成的瓶颈。

 

操作系统上的性能瓶颈

一般指的是windows、UNIX、Linux等操作系统。

例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统上出现性能瓶颈。

 

网络设备上的性能瓶颈

一般指的是防火墙、动态负载均衡器、交换机等设备。

例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他负载较轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的作用,这时可以认为网络瓶颈。

 

  性能测试出现的原因及其定位十分复杂,这里只是简单介绍常见的几种瓶颈类型和特征,而性能测试所需要做的就是根据各种情况因素综合考虑,然后协助开发人员\DBA\运维人员一起定位性能瓶颈。

 

 

一般性能调优步骤                                                                                      

 

一般性能问题调优的步骤:

步骤一:确定问题

应用程序代码:在通常情况下,很多程序的性能问题都是写出来的,因此对于发现瓶颈的模块,应该首先检查一下代码。

数据库配置:经常引起整个系统运行缓慢,一些诸如oracle 的大型数据库都是需要DBA进行正确的参数调整才能投产的。

操作系统配置:不合理就可能引起系统瓶颈。

硬件设置:硬盘速度、内存大小等都是容易引起瓶颈的原因,因此这些都是分析的重点。

网络:网络负载过重导致网络冲突和网络延迟。

 

步骤二:确定问题

  当确定了问题之后,我们要明确这个问题影响的是响应时间吞吐量,还是其他问题?是多数用户还是少数用户遇到了问题?如果是少数用户,这几个用户与其它用户的操作有什么不用?系统资源监控的结果是否正常?CPU的使用是否到达极限?I/O 情况如何?问题是否集中在某一类模块中? 是客户端还是服务器出现问题? 系统硬件配置是否够用?实际负载是否超过了系统的负载能力? 是否未对系统进行优化?

通过这些分析及一些与系统相关的问题,可以对系统瓶颈有更深入的了解,进而分析出真正的原因。

 

步骤三: 确定调整目标和解决方案

得高系统吞吐理,缩短响应时间,更好地支持并发。

 

步骤四:测试解决方案

对通过解决方案调优后的系统进行基准测试。(基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试)

 

步骤五:分析调优结果

系统调优是否达到或者超出了预定目标?系统是整体性能得到了改善,还是以系统某部分性能来解决其他问题。调优是否可以结束了。

  最后,如果达到了预期目标,调优工作就基本可以结束了。

 

下面算是一个技巧,如面试官问到一个性能问题假设,我不知道性能问题出在哪儿时,可以按照这个思路回答^_^

   • 查找瓶颈时按以下顺序,由易到难。
    服务器硬件瓶颈---〉网络瓶颈(对局域网,可以不考虑)---〉服务器操作系统瓶颈(参数配置)---〉中间件瓶颈(参数配置,数据库,web服务器等)---〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)
    注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。
    • 分段排除法 很有效

 

 

性能测试调优应该注意的要点:

  • 要点1: 在应用系统的设计开发过程中,应始终把性能放在考虑的范围内。
  • 要点2: 确定清晰明确的性能目标是关键。
  • 要点3: 必须保证调优后的程序运行正确。
  • 要点4: 系统的性能更大程度上取决于良好的设计,调优技巧只是一个辅助手段。
  • 要点5: 调优过程是迭代渐进的过程,每一次调优的结果都要反馈到后续的代码开发中去。
  • 要点6: 性能调优不能以牺牲代码的可读性和可维护性为代码。

 


 

 

  本文只介绍了一些性能调优的要关注的东西以及性能调优的一般要点。并没有具体说如何对系统的每个部件进行调优,如何要细说也不是一两书能说清的,对知识面的要求也非常高,是我目前的能力无法触摸的。

 

这里做个总结

  《性能测试知多少》系列基本完结,虽然时间拉得比较长,但我没有把它给太监。虽然内容都在空谈性能测试理论知识,但我认为这些东西对于你从事性能测试工作必不可少。当然,我在“ jmeter基础 ” 与“ loadrunner 技巧 ” 中讲解两个性能测试工具的使用。

  如果我的这些文章对于想了解和学习性能的同学带来一丝的帮助,我将非常开心。我不是高手,只是和你一起热爱测试技术的初学者,只是比较喜欢总结;也时常为前途迷茫,但我知道只要断去学习,路就在前方。我后面会整理性能调优的相关文章。

性能测试所有文章汇总:http://www.cnblogs.com/fnng/archive/2012/08/17/2644878.html 

spark性能测试报告与调优参数

1、代码中尽量避免groupby函数,如果需要数据聚合,group形式的为rdd.map(x=>(x.chatAt(0),x)).groupbyKey().mapValues((x=>x.toSet.size)).collection()改为rdd.map(x=>(x.chatAt(0),x)).countByKey();或进行reduceByKey,效率会提高3倍。2、parq 查看详情

面试题:在日常工作中怎么做mysql性能测试及调优的?

前言:服务器性能测试工具原理性能测试工具的主要作用是通过模拟生产环境中的真实业务操作,对被测试系统实行压力负载测试,监视被测试系统在不同业务、不同压力性能下的性能表现,找出潜在的性能瓶颈... 查看详情

day355.性能监控与调优概述-jvm(代码片段)

...该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境CPU负载飙高该如何处理?生产环境应该给应用分配多少线程合适?不加log,如何确定请求是否执行了某一行代码?不加log,... 查看详情

性能测试常见调优(代码片段)

在性能测试过程中,最重要的一部分就是性能瓶颈定位与调优。而引发性能瓶颈的原因是多种多样的,在之前的博客:常见的性能测试缺陷有进行介绍。这篇博客,来聊聊性能测试过程中的一些注意事项,以及常见的一些性能缺... 查看详情

性能测试知多少——常见性能问题

...不方便的问题,那很多情况下用户都是会选择离开,因此性能说的简单一些就是站在用户的角度去测试实际的感受,如果说功能测试是确保软件可用,易用。那么性能测试就是让这些功能变得更流畅,用户使用的更舒服。不过很... 查看详情

性能测试常见瓶颈分析及调优方法(代码片段)

在性能测试过程中,最重要的一部分就是性能瓶颈定位与调优。而引发性能瓶颈的原因是多种多样的,在之前的博客:常见的性能测试缺陷有进行介绍。这篇博客,来聊聊性能测试过程中的一些注意事项,以及常见的一些性能缺... 查看详情

如何对api进行负载测试与调优(一)

...。当API仅只用来处理后台的任务(例如生成报告),那么性能差点也不是问题。但是如今API慢慢地发展成为连接服务与终端用户的核心纽带。这种关键性的角色变化表明了一个重要的观点:那就是API的性能真的很重要。如果API数... 查看详情

数据库性能调优.原理与技术pdf

这是一本关于数据库调优的极佳参考书,强烈推荐给从事数据库管理人员,本书对有经验的数据库管理员同样有价值,对于数据库设计人员和数据库研究者,同样是一本难得的参考书。下载地址:网盘下载 查看详情

性能测试流程简介

...术和框架,在环境搭建阶段,你需要了解项目的部署;在性能分析与调优阶段,更要深入这些技术的细节去分析。1、表示 查看详情

jvm虚拟机性能监控与调优(jdk命令行jconsole)(代码片段)

很多资料在介绍JDK命令行工具时并不是在Java8环境下,因此还在使用过时的永久区系列的参数,给一些读者造成困难。Java8使用Metaspace(元空间)代替永久区,对于64位平台,为了压缩JVM对象中的_klass指针的大小,引入了类指针压... 查看详情

20171207

...果分析LoadRunner主要通过控制内部程序的调度来控制整个性能测试过程LoadRunner多线程驱动进程mdrv.exe和r3vuser.exe模拟产生压力r3vuser.exe仿真客户程序的客户端性能测试时对系统进行调优,不能提出性能调优的有效建议,性能测试不... 查看详情

性能调优调优的常见思路和方法(代码片段)

...和调优?在这里提供一些可实践、可借鉴、可参考的性能调优套路,即:如何在众多异常性能指标中,找出最核心的那一个,进而定位性能瓶颈点,最后进行性能调优以下会按照代码、CPU、内存、网络、磁... 查看详情

jvm原理及性能调优系列(jvm调优)

...好堆的比例分配。2、设置合适的新生代因为对其对系统性能和GC回收有一定的影响。3、设置合适的持久代因为其直接决定系统可以支持多少个类定义和多少个常亮。4、设置合适的线程栈否则系统可能因为线程所需资源和空间不... 查看详情

性能测试入门--工作流程

一、性能测试准备需求分析明确性能测试目标i了解软件功能、服务器架构制定测试计划、评估工作量制定测试模型(类似编写测试用例)2、搭建性能测试环境工具选项与准备工作搭建性能测试环境(性能测试环境资源配置和生... 查看详情

五分钟,彻底解决性能调优问题

很多工作两三年的朋友都跟我说,认为性能调优没什么用。刚工作的时候我也这样以为,但后来我才知道当时发想法有多么天真。性能调优的目的曾经,我的前前东家系统研发部门来了一位大神,为什么叫他大神&... 查看详情

spark日志分析项目demo--常规性能调优

一分配更多资源分配更多资源:性能调优的王道,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的;基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能... 查看详情

day707.jetty性能调优的思路-深入拆解tomcat&jetty(代码片段)

Jetty性能调优的思路Hi,我是阿昌,今天学习记录的是关于Jetty性能调优的思路一、操作系统层面调优对于Linux操作系统调优来说,我们需要加大一些默认的限制值,这些参数主要可以在/etc/security/limits.conf中或通过s... 查看详情

关于linux性能调优中磁盘io调优的一些笔记(代码片段)

...的笔记,内容很浅,可以用作入门博文内容结合《Linux性能优化》读书笔记整理涉及内容包括使用vmstat统计系统内磁盘分区I/O属性的性能使用iostat分析磁盘分区的饱和度,利用率,读写速率。使用lsof确定哪些进程正在... 查看详情