java虚拟机(jvm)调优案例分析与myeclipse性能调优实战

java虚拟机(jvm)调优案例分析与myeclipse性能调优实战

ID:39969015

大小:1.53 MB

页数:35页

时间:2019-07-16

java虚拟机(jvm)调优案例分析与myeclipse性能调优实战_第1页
java虚拟机(jvm)调优案例分析与myeclipse性能调优实战_第2页
java虚拟机(jvm)调优案例分析与myeclipse性能调优实战_第3页
java虚拟机(jvm)调优案例分析与myeclipse性能调优实战_第4页
java虚拟机(jvm)调优案例分析与myeclipse性能调优实战_第5页
资源描述:

《java虚拟机(jvm)调优案例分析与myeclipse性能调优实战》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6讲-Java虚拟机调优案例分析与MyEclipse性能调优实战软件工程系潘正军主要内容大纲案例分析实战:MyEclipse运行性能调优本节内容引入前面课程介绍了处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题时,除了知识与工具外,经验同样是一个很重要的因素。因此本章将与读者分享几个比较有代表性的实际案例。考虑到虚拟机故障处理和调优主要面向各类服务端应用,而大部分Java程序员较少有机会直接接触生产环境的服务器,因此本章还准备了一个所有开发人员都能够进行“亲身实战”的练习,希望通过

2、实践使读者获得故障处理和调优的经验。一、案例分析1-高性能硬件上的程序部署策略1.高性能硬件上的程序部署策略例如,一个15万PV(pageview)/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU、16GB物理内存,操作系统为64位CentOS5.4,Resin作为Web服务器。整个服务器暂时没有部署别的应用,所有硬件资源都可以提供给这访问量并不算太大的网站使用。管理员为了尽量利用硬件资源选用了64位的JDK1.5,并通过-Xmx和-Xms参数将Java堆固定在12GB。使用一

3、段时间后发现使用效果并不理想,网站经常不定期出现长时间失去响应的情况。监控服务器运行状况后发现网站失去响应是由GC停顿导致的,虚拟机运行在Server模式,默认使用吞吐量优先收集器,回收12GB的堆,一次FullGC的停顿时间高达14秒。并且由于程序设计的关系,访问文档时要把文档从磁盘提取到内存中,导致内存中出现很多由文档序列化产生的大对象,这些大对象很多都进入了老年代,没有在MinorGC中清理掉。这种情况下即使有12GB的堆,内存也很快被消耗殆尽,由此导致每隔十几分钟出现十几秒的停顿,令网站

4、开发人员和管理员感到很沮丧。一、案例分析1-高性能硬件上的程序部署策略在高性能硬件上部署程序,目前主要有两种方式:1.通过64位JDK来使用大内存。2.使用若干个32位虚拟机建立逻辑集群来利用硬件资源。此案例中的管理员采用了第一种部署方式。对于用户交互性强、对停顿时间敏感的系统,可以给Java虚拟机分配超大堆的前提是有把握把应用程序的FullGC频率控制得足够低,至少要低到不会影响用户使用,譬如十几个小时乃至一天才出现一次FullGC,这样可以通过在深夜执行定时任务的方式触发FullGC甚至自动

5、重启应用服务器来保持内存可用空间在一个稳定的水平。控制FullGC频率的关键是看应用中绝大多数对象能否符合“朝生夕灭”的原则,即大多数对象的生存时间不应太长,尤其是不能有成批量的、长生存时间的大对象产生,这样才能保障老年代空间的稳定。一、案例分析1-高性能硬件上的程序部署策略在大多数网站形式的应用里,主要对象的生存周期都应该是请求级或者页面级的,会话级和全局级的长生命对象相对很少。只要代码写得合理,应当都能实现在超大堆中正常使用而没有FullGC,这样的话,使用超大堆内存时,网站响应速度才会比较

6、有保证。除此之外,如果读者计划使用64位JDK来管理大内存,还需要考虑下面可能面临的问题:内存回收导致的长时间停顿。现阶段,64位JDK的性能测试结果普遍低于32位JDK。需要保证程序足够稳定,因为这种应用要是产生堆溢出几乎就无法产生堆转储快照(因为要产生十几GB乃至更大的Dump文件),哪怕产生了快照也几乎无法进行分析。相同程序在64位JDK消耗的内存一般比32位JDK大,这是由于指针膨胀,以及数据类型对齐补白等因素导致的。一、案例分析2-集群间同步导致的内存溢出例如,有一个基于B/S的MIS

7、系统,硬件为两台2个CPU、8GB内存的HP小型机,服务器是WebLogic9.2,每台机器启动了3个WebLogic实例,构成一个6个节点的亲合式集群。由于是亲合式集群,节点之间没有进行Session同步,但是有一些需求要实现部分数据在各个节点间共享。开始这些数据存放在数据库中,但由于读写频繁竞争很激烈,性能影响较大,后面使用JBossCache构建了一个全局缓存。全局缓存启用后,服务正常使用了一段较长的时间,但最近却不定期地出现了多次的内存溢出问题。一、案例分析2-集群间同步导致的内存溢出在

8、内存溢出异常不出现的时候,服务内存回收状况一直正常,每次内存回收后都能恢复到一个稳定的可用空间,开始怀疑是程序某些不常用的代码路径中存在内存泄漏,但管理员反映最近程序并未更新、升级过,也没有进行什么特别操作。只好让服务带着-XX:+HeapDumpOnOutOfMemoryError参数运行了一段时间。在最近一次溢出之后,管理员发回了heapdump文件,发现里面存在着大量org.jgroups.protocols.pbcast.NAKACK对象。JBossCache是基于自家的JGroups进

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。