Java面试中总问的jvm调优到底是什么?

面试总问的jvm调优到底是什么?
文章来源:程序员知识码头
链接:https://mp.weixin.qq.com/s/433Gz3gLEWCAhG4LGfVcjw

了解更多JVM知识,获取更多Java资料加博主Vx:gyhycx7980

请注意,jvm调优,调的是稳定,并不能带给你性能的大幅提升。

服务稳定的重要性就不用多说了,保证服务的稳定,gc永远会是Java程序员需要考虑的不稳定因素之一。

复杂和高并发下的服务,必须保证每次gc不会出现性能下降,各种性能指标不会出现波动,gc回收规律而且干净,找到合适的jvm设置。详细了解jvm的话请看神书《深入理解java虚拟机》。

说些题外话,面试发现,jvm调优很多人都没有经验,有人甚至怀疑这东西真正是否有用,有的公司统一jvm的设置贯穿所有服务。其实只是没碰到生产条件复杂的情况而已。

举个简单例子:

我曾经的公司,碰到过服务运行超过14h直接死机的问题,头天下午压测,第二天上午服务自动重启了,按照当时习惯,新服务需要压力测试满12h,原则上我的服务通过测试,由于测试环境复杂,所有开发都可以登陆而且脚本很多,qa认为可能是有脚本误杀了,但是当时离上线deadline时间还早,于是决定再压力一次,成功复现,最后查看jvm发现每次fullgc之后o区总是会多一点,jmap打印内存栈发现char对象使用逐渐增大,最后撑满内存, 最后定位到调用JNI发生内存泄露,解决了这个问题。

这只是简单的一次,在那家公司,由于服务偏算法而且流量很高,碰到过很多这种问题。

还有一次,压力测试loadrunner图像显示每隔一段时间的点上响应时间立刻下降,过2s又恢复正常,规律性很强,通过jstat发现频繁生成大对象直接进入老年代,老年代很快撑大触发full gc回收,回收时间过长造成服务暂停明显,立刻反应到压测的响应上。

解决的办法:

调大年轻代,让大对象可以在年轻代触发yong gc,调整大对象在年轻代的回收频次,尽可能保证大对象在年轻代回收,减小老年代缩短回收时间,服务果然稳定下来。当时这么调整下来会有一点性能损失,基本可以忽略不计,但是提升了服务的稳定性,这才是这次jvm调优最重要的。

全部评论

相关推荐

昨天 13:06
北京大学 Java
牛友们都收到开奖电话没
淳水微凉:骗人的,散了散了
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务