JAVA WEB系统性能调优(21页).doc
《JAVA WEB系统性能调优(21页).doc》由会员分享,可在线阅读,更多相关《JAVA WEB系统性能调优(21页).doc(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、-JAVA WEB系统性能调优-第 20 页JAVA WEB系统性能调优广州合道信息科技有限公司2014年3月 文档信息项目名: 项目编号: 作者: 罗承伟创建日期: 2014-03-21使用者: 标题: Javaweb 系统性能调优方案分类: 部门名称: 研发部版权声明: 文档状态文档状态草稿正式文档评审人员评审组组长:评审组成员: 评审时间 修订文档历史记录日期版本说明作者2014-03-21V初稿罗承伟目录1. 性能调优流程41.1、确定调优目标41.2、测量系统性能51.3、分析性能瓶颈52. JVM性能调优52.1、JVM内存组成及分配62.1.1、JAVA内存组成介绍:堆(Heap
2、)和非堆(Non-heap)内存62.1.2、堆内存分配62.1.3、非堆内存分配72.1.4、JVM内存限制(最大值)82.2、JVM参数详解82.3、参数配置示例143. J2EE应用监控153.1、数据库连接池监控(Druid)153.1.1、Druid连接池配置153.1.2、Druid连接池监控173.2、容器管理及监控(psi-probe)183.2.1、Tomcat下安装部署183.2.2、probe监控界面223.3、JAVA虚拟机监控(Visual VM)253.3.1、VisualVM安装253.3.2、VisualVM简介253.3.3、安装插件263.3.4、监控本地J
3、AVA应用273.3.5、监控远程JAVA应用283.3.6、使用Visual VM查看JVM相关信息313.3.7、使用Visual VM解决内存溢出问题333.3.8、使用Visual VM查看Tomcat的线程状态343.3.8、使用Visual VM查看CPU消耗情况361. 性能调优流程性能调优无疑是个庞大且复杂的话题,也是项目中非常重要的一环。由于性能调优涵盖的面实在是太多了,我们仅看看性能调优过程中常见的一些做法。1.1、确定调优目标性能调优,首先是要确定性能调优的目标是什么,如果现在应用已经满足了需求,就没必要去做性能调优了,毕竟不经过一个系统的过程,其实是无法确定你所做的性能
4、调整是否真的调优了性能,是否没有造成应用中其他的问题,所以确定性能目标是非常重要的,在定义性能目标的时候通常这么定义的呢:1 最大并发数2 Quality of Service 服务的质量,在软件系统方面我们认为主要表现在请求的出错率,系统的load等。3 最长响应时间 对于任何请求所能承受的最大响应时间。4 TPS 每秒需要支持的最大事务数,最典型的指标是:“某页面最高需要支撑每秒3000次 的访问次数”。例如一个web系统,需要定义出来的目标是:并发目标:最高支撑200并发;QoS:出错率须控制在万分之一,系统的load最高只能到达10;TPS:每秒完成3000次请求的处理;最大响应时间:
5、最长允许的响应时间为5秒。至于请求的平均响应时间这些就不在性能调优目标中定义,因为要达到TPS的要求,响应时间是必须要达到一个级别的,而且响应时间随着高并发是会出现劣化的。当然,还可以把性能指标定到更为细节,例如某个方法的TPS在100并发时需要达到多少。在确定好了性能目标后,重要的就是如何来测量系统的性能了。1.2、测量系统性能对于新系统而言,需要评估出其正式运行时的数据量的增长情况;而对于已运行的系统,则需要根据监控获取到系统的运行数据(例如高峰并发数、系统的响应速度情况、系统的load、网络流量、每类请求在总的请求中所占的百分比等)。新系统而言,要评估出具体的性能相对来说稍微好做一点,因
6、为此时系统通常较为单纯,数据量的增长也不可能是一夜之间增长的,因此基本可以按照一种正常的方法在测试环境评估出其正式运行的性能。而对于已运行的系统而言,则较为麻烦,因为通常来讲要在测试环境中模拟正式运行环境基本是不太可能的,因此这个时候通常要采取一些模拟的方法或更高压力的方法来尽量更为准确的评估出系统的性能。在测试系统性能时,通常可采用的方法有:1 单元测试 可借助单元测试来测试某个请求的性能2 压力测试 压力测试无疑是测量系统性能中最常采用的方式,根据定义的性能目标对系统进行压力测试,以确定系统是否满足性能要求,同时也可以根据压力测试的结果来分析系统的瓶颈,进而进行对应的调优,可用于做压力测试
7、的工具还是不少的,像loadrunner、Jmeter等。由于性能测试属于测试团队的工作范畴,就不在这展开去讲了。1.3、分析性能瓶颈根据测量系统性能的结果,多数是可以分析出系统性能瓶颈,同时还可以结合像jvm堆栈、jprofiler、系统日志等来进行进一步的确定,另外也可以根据性能调优人员的经验,例如可以去了解开发人员是否采用了不适合的数据结构等。2. JVM性能调优工作中我们使用开源的J2EE容器较多,一般常用的就是tomcat及jboss,网上对tomcat和jboss进行优化的资料很多,本文仅仅对JVM参数进行讨论。2.1、JVM内存组成及分配2.1.1、JAVA内存组成介绍:堆(He
8、ap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。组成图l 方法栈&本地方法栈线程创建时产生,方法执行时
9、生成栈帧l 方法区存储类的元数据信息 常量等l 堆Java代码中所有的new操作l native Memory(C heap)Direct Bytebuffer JNI Compile GC2.1.2、堆内存分配JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。组成详
10、解Young Generation即图中的Eden + From Space + To SpaceEden存放新生的对象Survivor Space有两个,存放每次垃圾回收后存活的对象Old GenerationTenured Generation 即图中的Old Space 主要存放应用程序中生命周期长的存活对象2.1.3、非堆内存分配JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。组成详解Permanent Generation保存虚拟机自己的静态(refective)数据主要存放
11、加载的Class类级别静态对象如class本身,method,field等等permanent generation空间不足会引发full GC(详见HotSpot VM GC种类)Code Cache用于编译和保存本地代码(native code)的内存JVM内部处理或优化2.1.4、JVM内存限制(最大值)JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然 可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G),而64bit以上的处理器就不会有限制了。2.2、JVM
12、参数详解参数名称含义默认值 -Xms初始堆大小物理内存的1/64(1GB)默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.-Xmx最大堆大小物理内存的1/4(113543K(130112K), 0.0094143 secsFull GC 121376K-10414K(130112K), 0.0650971 secs-XX:+PrintGCDetails 输出形式:GC DefNew: 8614K-781K(9088K), 0.0123035 secs 118250K-113543K(130112K), 0.0124633 se
13、csGC DefNew: 8614K-8614K(9088K), 0.0000665 secsTenured: 112761K-10414K(121024K), 0.0433488 secs 121376K-10414K(130112K), 0.0436268 secs-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps 可与-XX:+PrintGC -XX:+PrintGCDetails混合使用输出形式:11.851: GC 98328K-93620K(130112K), 0.0082960 secs-XX:+PrintGCApplica
14、tionStoppedTime 输出形式:Total time for which application threads were stopped: 0.0468229 seconds-XX:+PrintGCApplicationConcurrentTime 输出形式:Application time: 0.5291524 seconds-XX:+PrintHeapAtGC打印GC前后的详细堆栈信息 -Xloggc:filename把相关日志信息记录到文件以便分析.与上面几个配合使用 -XX:+PrintClassHistogramgarbage collects before printi
15、ng the histogram. -XX:+PrintTLAB查看TLAB空间的使用情况 XX:+PrintTenuringDistribution查看每次minor GC后新的存活周期的阈值 Desired survivor size 1048576 bytes, new threshold 7 (max 15)new threshold 7即标识新的存活周期的阈值为7。2.3、参数配置示例示例参数仅供参考:-server-Xms6000M-Xmx6000M-Xmn500M-XX:PermSize=500M-XX:MaxPermSize=500M-XX:SurvivorRatio=6553
16、6-XX:MaxTenuringThreshold=0-Xnoclassgc-XX:+DisableExplicitGC-XX:+UseParNewGC-XX:+UseConcMarkSweepGC-XX:+UseCMSCompactAtFullCollection-XX:CMSFullGCsBeforeCompaction=0-XX:+CMSClassUnloadingEnabled-XX:-CMSParallelRemarkEnabled-XX:CMSInitiatingOccupancyFraction=90-XX:SoftRefLRUPolicyMSPerMB=0-XX:+PrintC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA WEB系统性能调优21页 WEB 系统 性能 21
限制150内