性能调优项目测试与优化
2007-06-27 09:09
316 查看
作者:paulh [b]2007年5月31日[/b]
在项目或产品开发中,我们经常会遇到的一个问题是开发出来的产品或功能块在性能上达不到理想的效果。怎么样提高开发出来的产品或功能块的性能,怎么对一个以开发出来的项目进行性能调优,这是一个很复杂的问题。本人与我们的团队这几个月一直在做关于性能调优的外包项目,以个人在这一方面的经验来与大家交流分享。
我们所接的性能调优项目一般是这样的:Java项目,系统是可以运行的。Vendor希望我们能将整个系统或系统的某一方面性能提高超过50% (通常又叫2*2*2,即每次提高50%算是成功)。所涉及性能提高的方面有:减少系统在指定并发量下的内存占用量;减少系统访问DB的Load 数量; 提高Page的响应速度;减少 Ant Build的时间;提高系统一些特殊功能块的性能(如: 利用XML, XSLT生成批量html/jsp 文件;提高系统Web Service访问速度等等)。
性能优化中首先是找性能瓶颈,这就涉及到性能测试。
对于Web Page loading测试,我们一般使用Webload 工具:
Webload简介:
webload是RadView公司推出的一个性能测试和分析工具,它让web应用程序开发者自动执行压力测试;webload通过模拟真实用户的操作,生成压力负载来测试web的性能
用户创建的是基于javascript的测试脚本,称为议程agenda,用它来模拟客户的行为,通过执行该脚本来衡量web应用程序在真实环境下的性能。
我们会对我们关注的Page 进行脚本录制,修改形成agenda,多个agenda放在一个压力模板中,执行此模板。Webload 可以输出Excel或Html形式的测试结果报表。这里能统计出某时间点的Load 数,每一Request 执行的时间,执行结果等等。
在服务器端,我们一般会用Jprofiler 去监视服务器,它可以对JVM线程,CPU,JVM Memory,JDBC等进行监视。Jprofiler 是一个很强的Profile 工具,它甚至可以对每个方法的内存使用比率,CPU执行次数,执行时间都很详细的显示出来,为我们的分析提供重要的帮助。
比如,在测试一个Web Service 性能时,用JProfiler 得到每个方法的CPU使用图。
图片附件: [jprofiler1] 2.jpg (2007-5-31 10:19, 154.89 K)
从图中很容易分析出系统的性能瓶颈在于用于监控Request status的Monitor的处理上。 然后改变了Monitor的Observer 模式的实现,性能一下提高一倍多。
对于像提高某一个具体的API的性能,我们有时会用最原始的办法,在方法调用前后放置监控执行时间的代码,然后System.out.println(“Time:”+…); 来监控重要方法执行的时间,分析,估计出性能的瓶颈,然后Debug,跟踪,调试。这个方法看起来很土,但有时很管用。
在我们做的项目中,对于修改的代码,都要求所有Test Case能通过,并且要保证用Coverage 工具(如:Emma)运行出来Test Case的覆盖率不能降低。这也是保证质量的办法。
一般来说,有下面一些改变代码的方式来提高系统性能:
1 做好性能测试与Profile, 分析瓶颈;
2 缓存不常变化的数据;
3 主动释放不用的对象,在finally中释放资源,避免内存泄漏;
4 对于不需要立即返回结果的应用,将处理改为多线程方式;
5 核心代码要仔细推敲,尽量减少不必要的开销;
6 在解析XML,处理Web Service时,尽量选用好的最新版本的XML Parser / Binding 工具,这之间的性能差可能是很大的;
7 选用高性能的JDBC驱动及数据库连接池,优化功能复杂的SQL;
8 在Page Load大的Flash或Picture时采用延迟加载技术;
9 精通开源框架的配置,改变配置,优化这些框架的使用。
这篇文章主要对系统性能测试与性能调优方向做了一个简单的阐述,全是个人的一些体会,希望对大家有所帮助。
在项目或产品开发中,我们经常会遇到的一个问题是开发出来的产品或功能块在性能上达不到理想的效果。怎么样提高开发出来的产品或功能块的性能,怎么对一个以开发出来的项目进行性能调优,这是一个很复杂的问题。本人与我们的团队这几个月一直在做关于性能调优的外包项目,以个人在这一方面的经验来与大家交流分享。
我们所接的性能调优项目一般是这样的:Java项目,系统是可以运行的。Vendor希望我们能将整个系统或系统的某一方面性能提高超过50% (通常又叫2*2*2,即每次提高50%算是成功)。所涉及性能提高的方面有:减少系统在指定并发量下的内存占用量;减少系统访问DB的Load 数量; 提高Page的响应速度;减少 Ant Build的时间;提高系统一些特殊功能块的性能(如: 利用XML, XSLT生成批量html/jsp 文件;提高系统Web Service访问速度等等)。
性能优化中首先是找性能瓶颈,这就涉及到性能测试。
对于Web Page loading测试,我们一般使用Webload 工具:
Webload简介:
webload是RadView公司推出的一个性能测试和分析工具,它让web应用程序开发者自动执行压力测试;webload通过模拟真实用户的操作,生成压力负载来测试web的性能
用户创建的是基于javascript的测试脚本,称为议程agenda,用它来模拟客户的行为,通过执行该脚本来衡量web应用程序在真实环境下的性能。
我们会对我们关注的Page 进行脚本录制,修改形成agenda,多个agenda放在一个压力模板中,执行此模板。Webload 可以输出Excel或Html形式的测试结果报表。这里能统计出某时间点的Load 数,每一Request 执行的时间,执行结果等等。
在服务器端,我们一般会用Jprofiler 去监视服务器,它可以对JVM线程,CPU,JVM Memory,JDBC等进行监视。Jprofiler 是一个很强的Profile 工具,它甚至可以对每个方法的内存使用比率,CPU执行次数,执行时间都很详细的显示出来,为我们的分析提供重要的帮助。
比如,在测试一个Web Service 性能时,用JProfiler 得到每个方法的CPU使用图。
图片附件: [jprofiler1] 2.jpg (2007-5-31 10:19, 154.89 K)
从图中很容易分析出系统的性能瓶颈在于用于监控Request status的Monitor的处理上。 然后改变了Monitor的Observer 模式的实现,性能一下提高一倍多。
对于像提高某一个具体的API的性能,我们有时会用最原始的办法,在方法调用前后放置监控执行时间的代码,然后System.out.println(“Time:”+…); 来监控重要方法执行的时间,分析,估计出性能的瓶颈,然后Debug,跟踪,调试。这个方法看起来很土,但有时很管用。
在我们做的项目中,对于修改的代码,都要求所有Test Case能通过,并且要保证用Coverage 工具(如:Emma)运行出来Test Case的覆盖率不能降低。这也是保证质量的办法。
一般来说,有下面一些改变代码的方式来提高系统性能:
1 做好性能测试与Profile, 分析瓶颈;
2 缓存不常变化的数据;
3 主动释放不用的对象,在finally中释放资源,避免内存泄漏;
4 对于不需要立即返回结果的应用,将处理改为多线程方式;
5 核心代码要仔细推敲,尽量减少不必要的开销;
6 在解析XML,处理Web Service时,尽量选用好的最新版本的XML Parser / Binding 工具,这之间的性能差可能是很大的;
7 选用高性能的JDBC驱动及数据库连接池,优化功能复杂的SQL;
8 在Page Load大的Flash或Picture时采用延迟加载技术;
9 精通开源框架的配置,改变配置,优化这些框架的使用。
这篇文章主要对系统性能测试与性能调优方向做了一个简单的阐述,全是个人的一些体会,希望对大家有所帮助。
相关文章推荐
- Spark性能调优之——在实际项目中,使用fastutil优化数据格式
- 一次真实项目性能测试与调优的总结
- Parquet性能测试调优及其优化建议
- 一次真实项目性能测试与调优的总结
- Tair LDB基于Prefixkey的范围查找性能优化项目测试及完成总结报告
- 一次真实项目性能测试与调优的总结
- 第121课: Spark Streaming性能优化:通过摄像头图像处理案例来说明Spark流处理性能评估新方法及性能调优参数测试
- 项目压力测试 出分析报告 性能调优
- 项目(速度)性能调优--tomcat优化
- 在项目初期,性能测试、调优的小结
- Java项目性能持续优化中……
- 转:Web网站性能测试分析及调优实例
- apache2配置优化以及性能测试小结
- JNI/NDK开发指南(八)---JNI调用性能测试及优化
- H5性能优化测试建议
- J2EE应用性能问题的常用优化项目
- android TraceView使用以及listview 的性能优化测试(一) .
- 并发环境下的缓存容器性能优化(下):性能测试
- 127168420条记录的SQL2005数据库性能测试,程序人生的一次飞跃(上亿条记录的查询测试、查询优化)
- rabbitmq的性能测试及优化