JVM调优

JVM调优是干嘛

JVM调优是干嘛呢?其实就是找到合适的JVM设置。

包括:

  1. 新生代或老年代大小
  2. 选择合适的GC算法(收集器)

但是在找到这些之前,我们需要查看JVM的一些信息,比如:新生代和老年代占用情况,GC发生的次数以及时长等等。

jvm调优,调的是稳定,并不能带给你性能的大幅提升。服务稳定的重要性就不用多说了,保证服务的稳定,gc永远会是Java程序员需要考虑的不稳定因素之一。复杂和高并发下的服务,必须保证每次gc不会出现性能下降,各种性能指标不会出现波动,gc回收规律而且干净,找到合适的jvm设置。

调优的指标

在性能属性里面,吞吐量、延迟、内存占用,我们只能选择其中两个进行调优,不可三者兼得。

调优方法

工具有:Jconsole,jProfile,VisualVM等。

首先是查看JVM的信息,我们可以通过jvisualvm.exe中的Visual GC插件查看GC的图形,也可以通过以下命令:

jstat -gc 15016 1000

看到每1秒钟java进程号为15016的GC回收情况
结果为:

[root@yxdevapp04 c1000k]# jstat -gc 15016 1000

S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT

699008.0 699008.0 29980.4 0.0 699136.0 116881.6 2097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272

699008.0 699008.0 29980.4 0.0 699136.0 118344.8 2097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272

699008.0 699008.0 29980.4 0.0 699136.0 119895.5 2097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272

699008.0 699008.0 29980.4 0.0 699136.0 121383.1 2097152.0 660769.4 21248.0 20071.0 354 54.272 0 0.000 54.272

解释如下:

S0C 是指:Survivor0区的分配空间

S0U 是指:Survivor1区的已经使用的空间

EC是指:Eden区所使用的空间

EU是指:Eden区当前使用的空间

OC是指:老年代分配的空间

OU是指:老年代当前使用的空间

PC是指:持久待分配的空间

PU是指:持久待当前使用的空间

YGC是指:年轻代发生的次数,这里是354次

YGCT是指:年轻代发送的总时长,这里是54.272秒,因此每次年轻代发生GC,即平均每次stop-the-world的时长为54.272/354=0.153秒。

FGC是指:年老代回收的次数,或者成为FullGC的次数。

FGCT是指:年老代发生回收的总时长。

GCT是指:包括年轻代YGC及年老代FGC的总时间长。

经过实际的调优测试我们发现,当发生YGC的时候,如果S0U或S1U区如果有任意一个区域为0的时候,此时YGC的速度很快,相反如果S0U或者S1U中都有数据,或相对满的时候,此时YGC的时间边长,这就是因为S0/S1及Eden区的比例问题导致的。

经过一定时间的调优,我们基本上可以使得YGC的次数非常少,时间非常快,很长时间,数天都不会发生FGC,此时JVM的调优算是一个好的结果。

https://blog.csdn.net/Javazhoumou/article/details/99298624

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值