JVM调优实战.doc

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JVM调优实战.doc

JVM调优实战 付增斌 日期:2009-05-21 文档修订记录 版本 日期 撰写人 审核人 批准人 变更摘要 修订位置 目录 1 理论篇 1 1.1 多功能养鱼塘-JVM内存 1 1.2 池塘中的鱼-程序中的对象 2 1.3 养殖区域划分-JVM中的代 2 1.4 主人定期捕鱼-JVM垃圾回收 4 1.5 不同的捕鱼方式-垃圾回收器 5 1.6 捕鱼工具选择-JVM参数 7 2 实战篇 16 2.1 测试目的 16 2.2 测试环境准备 16 2.3 录制测试脚本 17 2.4 定义测试场景 17 2.5 执行初步性能测试 17 2.6 选择调优方案 18 2.7 调优后JVM监控图 21 2.8 测试结果分析 24 3 性能问题举例 25 3.1 性能症状 25 3.2 监控结果 25 3.3 原因分析 28 3.4 该系统的JVM设置 29 4 后记 29 5 附:舍得网的典型配置 30 理论篇 多功能养鱼塘-JVM内存 大鱼塘O(可分配内存): JVM可以调度使用的总的内存数,这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A(堆内存):JVM运行时数据区域,它为类实例和数组分配的内存。堆可以是固定大小的也可以是可变大小的。其中 Heap = {Old + NEW = { Eden , from, to } }。JVM为优化或内部处理所分配的内存。它存储每一个类的结构,如一个运行时的常量池、字段和方法数据、方法的代码和构造函数。这个方法区是逻辑上堆的一部分,但依赖于实现,一个JVM可以不去回收或者压缩它。像堆一样,方法区可以固定大小的,也可以是大小可变的。方法区不是必须是连续的,它们可以是不连续的。除方法区之外,JVM总是从非堆中分配用于优化和内部处理所需的内存。例如,JIT编译器为高性能的JVM代码转换存储成本地代码而分配的内存。 整个池塘结构图如下: 查看大池塘O大小的方法为: 在命令行下用 java -XmxXXXXM -version 命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息,示例如下: java -Xmx3072M -version。 当一个URL被访问时,内存申请过程如下: A. JVM会试图为相关Java对象在Eden中初始化一块内存区域 B. 当Eden空间足够时,内存申请结束。否则到下一步 C. JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收), 释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区 D. Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时Survivor区的对象会被移到Old区,否则会被保留在Survivor区 E. 当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级) F. 完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”out of memory错误” 短中期鱼苗养殖区-年青代(Young Generation) 年青代由一个Eden Space和两个Survivor Spaces组成,虚拟机初始时分配所有的对象到Eden Space,许多对象也是在这里死去。当它执行一个“minor GC”的时候,虚拟机将从Eden Space中移动一些残余的对象到其中的一个Survivor Spaces中。青年代就好像养鱼塘中的“中短期养殖区”一样,主人把鱼先投放到“短期养殖区”喂养,隔一段时间就开始下网捞出已经长成的那些鱼拿到集市去卖,这个过程就是从“Eden Space”中执行垃圾回收的过程。主人接着把捕捞之后剩下的“漏网之鱼”赶到“中期养殖区”继续喂养。这个“中期养殖区”就是“Survivor Spaces”,当然鱼在“中期养殖区”喂养一段时间后也要捞出那些长成的鱼去卖,这就是对“Survivor Spaces” 执行垃圾回收的过程。 Ps Eden Space: 这个内存池在对象初始化时被分配; Ps Survivor Space: 这个内存池中包含着Eden Space 经过GC之后幸存下来的对象; 年轻代设置策略:对于响应时间优先的应用尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档