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调优最重要的。

全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 17:30
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务