工具使用实例及面试题解析
三 一次线上问题排查过程
在实践中使用工具是熟悉工具最好的途径,本节将讲述一个线上问题的完整排查过程,希望加深对JVM工具的认识和掌握。
3.1 问题
有一次,新上线的服务系统在运行了一段时间后出现大量的服务超时警告。根据监控显示,在1分钟内出现了上千次的服务请求超时。
通过查看监控系统中的性能指标,发现YoungGC明显出现异常,较比于旧版本,新版本的YoungGC用时明显增加。当进行YoungGC时,程序会暂停,即出现stop the world现象,而我们规定的服务超时时间是几百毫秒,由于YoungGC时间过长,导致整个服务超时。为此,我们推断服务超时的原因为出现了大量的耗时过多的YoungGC。
为了排查问题,我们下线了一个线上节点,并对线上服务进行回滚处理,接下来就针对线下节点进行分析。
3.2 排查过程
YoungGC主要做如下两件事情:
- 利用可达性分析算法,标注存活对象;
- 将存活对象移动到Survivor区或者老年代区。
正常情况下,Survivor区的利用率保持较低的水平,并且比较平稳,新版本上线后,Survivor区的空间利用率迅速上升,并且YoungGC的异常情况和Survivor区的空间利用率异常情况保持一致性。从YoungGC的工作机制来看,我们猜测是程序中长周期的对象越来越多导致YoungGC时间过长。
为此,我们在机器上执行 jmap -dump:format=b,file=heap pid 来保存堆内存文件,并利用MAT工具查看堆中
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
“挨踢”行业行情日益严峻,企业招聘的门槛也随之越来越高,大厂hc少之又少。 庞大的知识体系下,不知道学什么、怎么学? 面试高频考点是什么、怎么回答才能得到面试官的青睐? 作为后端求职者,在Java的道路上越走越宽。 本专刊则针对Java面试考点上,精讲JVM知识点,为大家的大厂求职路保驾护航! 针对如今校招痛点,深入详解JVM知识考点,列出高频真题并详细解答!探索JVM精髓!

