JVM-jvisualvm 监控运行的服务

查看GC下载插件-VisualVM网址:VisualVM: Plugins Centers(和自己的jdk版本对应)

在工具中进行安装插件

连接远程的JVM

添加启动参数

-Djava.rmi.server.hostname=远程主机ip
-Dcom.sun.management.jmxremote.port=jmx连接端口
-Dcom.sun.management.jmxremote.rmi.port=jmx监控端口
-Dcom.sun.management.jmxremote.authenticate=false //认证开启
-Dcom.sun.management.jmxremote.ssl=false //ssl开启

jvisualvm 中先添加远程主机,然后再添加jmx远程连接

拓展:堆内存空间

eden:s0:s1=8:1:1

s0和s1 一个是form一个是to GC之后空的为to

eden区满了 Minor GC到form区(Minor GC是发生在新生代中的垃圾收集动作,所采用的是复制算法)

简单解释:eden经历gc之后,到from。from区满了经历gc之后到to区,对象经历15次gc之后还存活,就到old区,特殊的大对象(需要分配一块较大的连续内存空间)经历gc之后还存活就进入老年代

详细解释:

当对象在 Eden ( 包括一个 Survivor 区域,这里假设是 from 区域 ) 出生后,在经过一次 Minor GC 后,如果对象还存活,并且能够被另外一块 Survivor 区域所容纳( 上面已经假设为 from 区域,这里应为 to 区域,即 to 区域有足够的内存空间来存储 Eden 和 from 区域中存活的对象 ),则使用复制算法将这些仍然还存活的对象复制到另外一块 Survivor 区域 ( 即 to 区域 ) 中,然后清理所使用过的 Eden 以及 Survivor 区域 ( 即 from 区域 ),并且将这些对象的年龄设置为1,以后对象在 Survivor 区每熬过一次 Minor GC,就将对象的年龄 + 1,当对象的年龄达到某个值时 ( 默认是 15 岁,可以通过参数 -XX:MaxTenuringThreshold 来设定 ),这些对象就会成为老年代。

特殊情况:对于一些较大的对象 ( 即需要分配一块较大的连续内存空间 ) 则是直接进入到老年代。虚拟机提供了一个-XX:PretenureSizeThreshold参数,令大于这个设置值的对象直接在老年代分配。这样做的目的是避免在Eden区及两个Survivor区之间发生大量的内存复制,因为新生代采用的是复制算法收集内存

老年代的收集:标记-清除(可达性分析)

堆空间和方法区/元空间满了:就是OOM

堆参数

  • -Xms:初始堆大小,默认为物理内存的1/64。

  • -Xmx:最大堆大小,默认物理内存1/4。

  • -Xmn:新生代大小,默认整个堆的3/8。

  • -XX:MinHeapFreeRatio:设置堆空间最小空闲比例。当对空间的空闲内存小于这个数值时,JVM便会扩展堆空间。

  • -XX:MaxHeapFreeRatio:设置堆空间的最大空闲比例。当堆空间的空闲内存大于这个数值时,便会压缩堆空间,得到一个较小的堆。

  • -XX:NewSize:设置新生代的大小。

  • -XX:NewRatio:设置老年代与新生代的比例,它等于老年代大小除以新生代大小。

  • -XX:SurviorRatio:新生代中eden区与survivior区的比例,设置为8,则两个Survior区与一个Eden区的比值为2:8,一个Survior区占整个新生代的1/10。

  • -XX:TargetSurvivorRatio:设置survivior区的可使用率。当survivior区的空间使用率达到这个数值时,会将对象送入老年代。

  • -XX:+HeapDumpOnOutOfMemoryError:OOM时导出堆到文件。

  • -XX:HeapDumpPath:导出OOM的路径。

  • -XX:OnOutOfMemoryError:在OOM时执行一个脚本。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值