JVM内存监控及调优方法解析课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《JVM内存监控及调优方法解析课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JVM 内存 监控 方法 解析 课件
- 资源描述:
-
1、JVM内存监控及性能调优内存监控及性能调优2022年年8月月黄国庆黄国庆重庆市擎天博元科技有限公司重庆市擎天博元科技有限公司2022-8-8Metarnet Technologies Co.,Ltd.2JVM内存监控及性能调优内存监控及性能调优q 主要内容主要内容什么是JVMJVM内存模型内存分配垃圾回收监控实例 配置实例2022-8-8Metarnet Technologies Co.,Ltd.3JVM内存监控及性能调优内存监控及性能调优什么是?什么是?基本上来说,JVM是一个虚拟运行环境,对于字节码来说就像是一个机器一样,可以执行任务,并通过底层实现执行内存相关的操作。JVM使Java程序
2、做到了“一次编写,到处运行”。JVM解放了程序员,使程序员不必再关系对象的生命周期,使程序员不必再关心应该在何时释放内存。可以将JVM当做是一种专为Java而生的特殊的操作系统,它的工作是管理运行Java应用程序的运行时环境。2022-8-8Metarnet Technologies Co.,Ltd.4JVM内存监控及性能调优内存监控及性能调优q什么是什么是OOM?out-of-memory系统无法为新线程和新对象分配空间“堆”满了,垃圾回收不成功影响:业务宕机2022-8-8Metarnet Technologies Co.,Ltd.5JVM内存监控及性能调优内存监控及性能调优qJVM内存模
3、型内存模型各个年代:新生代(Young Generation)伊甸园空间(EdenEden)、幸存者空间(SurvivorSurvivor)最新被创建的对象会被分配到这里,由于大部分对象在创建后会很快变得不可到达,所以很多对象被创建在新生代,然后消失。老年代(Old Generation)对象没有变得不可达,并且从新生代中存活下来,会被拷贝到这里。持久代(Permanent Generation)也被称为方法区(method area)。他用来保存类常量以及字符串常量。先理解养鱼专业户的“渔池”?2022-8-8Metarnet Technologies Co.,Ltd.6JVM内存监控及性能
4、调优内存监控及性能调优qJVM内存模型内存模型每个空间的执行顺序如下:绝大多数刚刚被创建的对象会存放在伊甸园空间。在伊甸园空间执行了第一次GC之后,存活的对象被移动到其中一个幸存者空间。此后,在伊甸园空间执行GC之后,存活的对象会被堆积在同一个幸存者空间。当一个幸存者空间饱和,还在存活的对象会被移动到另一个幸存者空间。之后会清空已经饱和的那个幸存者空间。在以上的步骤中重复几次依然存活的对象,就会被移动到老年代。2022-8-8Metarnet Technologies Co.,Ltd.7JVM内存监控及性能调优内存监控及性能调优qJVM内存模型内存模型垃圾回收(GC)是旨在释放不可达Java对
5、象所占用的内存的过程,是Java virtual machine(JVM)中动态内存管理系统的核心组成部分。在一个典型的垃圾回收周期中,所有仍被引用的对象,即可达对象,会被保留。没有被引用的Java对象所占用的内存会被释放并回收,以便分配给新创建的对象。发生在新生代的对象的消失:发生在新生代的对象的消失:minor GC(局部垃圾回收)(局部垃圾回收)发生在老年代的对象的消失:发生在老年代的对象的消失:major GC(完全垃圾回收)(完全垃圾回收)2022-8-8Metarnet Technologies Co.,Ltd.8JVM内存监控及性能调优内存监控及性能调优q内存分配内存分配当你在启
6、动Java应用程序时指定了启动参数_-Xmx_(例如,java-Xmx2g MyApp),则相应大小的内存会被分配给Java进程。这块内存即所谓的*Java堆*(或简称为*堆*)。这块专用的内存地址空间用于存储Java应用程序所创建的对象。随着Java应用程序的运行,会不断的创建新对象并为之分配内存,Java堆(即地址空间)会逐渐被填满。32位与64位的区别32位JVM最大堆为1.5G64位JVM最大堆为操作系统中内存可使用空间大小2022-8-8Metarnet Technologies Co.,Ltd.9JVM内存监控及性能调优内存监控及性能调优q垃圾回收垃圾回收minor GCmajor
7、 GCq目标目标快速释放不可达对象所占用的内存,防止应用程序出现OOM错误。回收内存时,对应用程序的性能(指延迟和吞吐量)的影响要尽可能小q原则原则JVM堆不是越大越好(堆越大GC时间越长)不是每个应用程序的JVM配置均可以一样(应用规模、结构和响应要求不一样)调优的操作是循序渐进的(摸着石头过河)2022-8-8Metarnet Technologies Co.,Ltd.10JVM内存监控及性能调优内存监控及性能调优q监控实例监控实例JVM监控工具命令行:jstat(关注GC的次数和GC所耗时间)jmap(将内存堆印象保存为文件)HeapAnalyzer(分析jmap保存的文件)图形化Jco
8、nsoleVisualVM2022-8-8Metarnet Technologies Co.,Ltd.11JVM内存监控及性能调优内存监控及性能调优q监控实例监控实例JVM监控工具示例jstat gc$vmid$1000 (vmid是java应用的进程id号,1000:每隔一秒展示GC监控数据)从上图中可计算得到以下值:年青代GC发生了1989次(YGCT),共耗费了41.001秒(YGC),故年青代每次GC的时间为:41.001/1989=0.020秒完全GC发生了1次(FGCT),共耗费了0.971秒(FGC),故完全GC每次GC的时间为:0.971/1=0.971秒一般性能较好的判断:年
9、青代GC耗时在50100毫秒以内,完全GC小于1秒以内为很好的性能。(因为GC均会影响系统访问)2022-8-8Metarnet Technologies Co.,Ltd.12JVM内存监控及性能调优内存监控及性能调优q监控实例监控实例JVM监控工具示例jmap-dump:format=b,file=testjvm.dump$vmid$(vmid是java应用的进程id号,file:java堆内存数据保存为文件的名称)以上的命令可以将当前以上的命令可以将当前JAVA内存堆保存为文件,便于进一步进行分析。内存堆保存为文件,便于进一步进行分析。特别注意:特别注意:进行此工作的时候,应用访问可能会中
10、断。所以不应该在业务运行状态进行此工作的时候,应用访问可能会中断。所以不应该在业务运行状态下操作此命令。下操作此命令。2022-8-8Metarnet Technologies Co.,Ltd.13JVM内存监控及性能调优内存监控及性能调优q监控实例监控实例JVM分析工具示例 HeapAnalyzer命令行:java-Xmx800m-jar ha395.jar(注意:-Xmx800m 是指定工具所需的java堆大小,此值要大于分析文件的尺寸大小,如果启动过程中发现控制台有 java.lang.OutOfMemoryError出现,可以适当加大上面的数字800,给予更多的空间。ha395.jar
11、中的文件名称按实际下载解压后的文件名为准)2022-8-8Metarnet Technologies Co.,Ltd.14JVM内存监控及性能调优内存监控及性能调优q监控实例监控实例JVM监控工具示例 HeapAnalyzer输出的内容:以下表内容即显示当前系统中出现泄漏的对象(flex/messaging/messages/AsyncMessage)及占用内存的大小。LeakSizeTotalSizeSizeAnalysisNameNo.ChildNo.ParentAddress16199787316199787387Responsible for 161,997,873 bytes(61.
12、14%)of Java heap Contains 2 instances of the following leak suspects:-array of Ljava/lang/Object;holding 61,312,817 bytes at 0 x1a076af0-array of Ljava/lang/Object;holding 66,644,382 bytes at 0 x12e5fc68flex/messaging/MessageClient1040 xb53e1e866644382666443826972866,644,382 bytes(25.15%)of Java hea
13、p is used by 13,321 instances of flex/messaging/messages/AsyncMessage-Contained under flex/messaging/MessageClient holding 161,997,873 bytes at 0 xb53e1e8array of Ljava/lang/Object;1332110 x12e5fc686400692364006923064,006,923 bytes(24.16%)of Java heap is used by 46,275 instances of bytebyte(61MB/24.
展开阅读全文