JAVAWEB系统性能调优..doc
文本预览下载声明
JAVA WEB系统性能调优
V1.0
广州合道信息科技有限公司
2014年月: 罗承伟 创建日期: 2014-03-21 使用者: 标题: Javaweb 系统性能调优方案 分类: 部门名称: 研发部 版权声明:
文档状态
文档状态 □草稿 ■正式 文档评审人员 评审组组长:
评审组成员: 评审时间
修订文档历史记录
日期 版本 说明 作者 2014-03-21 V1.0 初稿 罗承伟
目录
1. 性能调优流程 4
1.1、确定调优目标 4
1.2、测量系统性能 5
1.3、分析性能瓶颈 5
2. JVM性能调优 5
2.1、JVM内存组成及分配 6
2.1.1、JAVA内存组成介绍:堆(Heap)和非堆(Non-heap)内存 6
2.1.2、堆内存分配 6
2.1.3、非堆内存分配 7
2.1.4、JVM内存限制(最大值) 8
2.2、JVM参数详解 8
2.3、参数配置示例 14
3. J2EE应用监控 15
3.1、数据库连接池监控(Druid) 15
3.1.1、Druid连接池配置 15
3.1.2、Druid连接池监控 17
3.2、容器管理及监控(psi-probe) 18
3.2.1、Tomcat下安装部署 18
3.2.2、probe监控界面 22
3.3、JAVA虚拟机监控(Visual VM) 25
3.3.1、VisualVM安装 25
3.3.2、VisualVM简介 25
3.3.3、安装插件 26
3.3.4、监控本地JAVA应用 27
3.3.5、监控远程JAVA应用 28
3.3.6、使用Visual VM查看JVM相关信息 31
3.3.7、使用Visual VM解决内存溢出问题 33
3.3.8、使用Visual VM查看Tomcat的线程状态 34
3.3.8、使用Visual VM查看CPU消耗情况 36
性能调优流程
性能调优无疑是个庞大且复杂的话题,也是项目中非常重要的一环。由于性能调优涵盖的面实在是太多了,我们仅看看性能调优过程中常见的一些做法。
1.1、确定调优目标
性能调优,首先是要确定性能调优的目标是什么,如果现在应用已经满足了需求,就没必要去做性能调优了,毕竟不经过一个系统的过程,其实是无法确定你所做的性能调整是否真的调优了性能,是否没有造成应用中其他的问题,所以确定性能目标是非常重要的,在定义性能目标的时候通常这么定义的呢:
最大并发数
Quality of Service
服务的质量,在软件系统方面我们认为主要表现在请求的出错率,系统的load等。
最长响应时间
对于任何请求所能承受的最大响应时间。
TPS
每秒需要支持的最大事务数,最典型的指标是:“某页面最高需要支撑每秒3000次 的访问次数”。
例如一个web系统,需要定义出来的目标是:
并发目标:最高支撑200并发;
QoS:出错率须控制在万分之一,系统的load最高只能到达10;
TPS:每秒完成3000次请求的处理;
最大响应时间:最长允许的响应时间为5秒。
至于请求的平均响应时间这些就不在性能调优目标中定义,因为要达到TPS的要求,响应时间是必须要达到一个级别的,而且响应时间随着高并发是会出现劣化的。
当然,还可以把性能指标定到更为细节,例如某个方法的TPS在100并发时需要达到多少。
在确定好了性能目标后,重要的就是如何来测量系统的性能了。
1.2、测量系统性能
对于新系统而言,需要评估出其正式运行时的数据量的增长情况;而对于已运行的系统,则需要根据监控获取到系统的运行数据(例如高峰并发数、系统的响应速度情况、系统的load、网络流量、每类请求在总的请求中所占的百分比等)。
新系统而言,要评估出具体的性能相对来说稍微好做一点,因为此时系统通常较为单纯,数据量的增长也不可能是一夜之间增长的,因此基本可以按照一种正常的方法在测试环境评估出其正式运行的性能。
而对于已运行的系统而言,则较为麻烦,因为通常来讲要在测试环境中模拟正式运行环境基本是不太可能的,因此这个时候通常要采取一些模拟的方法或更高压力的方法来尽量更为准确的评估出系统的性能。
在测试系统性能时,通常可采用的方法有:
单元测试
可借助单元测试来测试某个请求的性能
压力测试
压力测试无疑是测量系统性能中最常采用的方式,根据定义的性能目标对系统进行压力测试,以确定系统是否满足性能要求,同时也可以根据压力测试的结果来分析系统的瓶颈,进而进行对应的调优,可用于做压力测试的工具还是不少的,像loadrunner、Jmeter等。由于性能测试属于测试团队
显示全部