当系统运行一段时间,jvm需要垃圾回收的时候,发现整个系统会“卡住”一段时间,几乎不能处理任何的请求,然后发现系统所占用的内存急剧下降,应该是被jvm回收了,不知道是系统架构问题还是jvm的问题,但这种“抖动”的确影响太大了,如何解决这个问题呢?从业务架构方向考虑还是java代码写的不够好?
谢谢指点!
在你说的垃圾回收抖动前后用jmap命令dump下内存对比下,看前后是哪些对象被回收了,看你描述“GC之后内存急剧下降”,感觉很可能是代码问题。
普通用的年轻代的 parNew 和老年代的CMS都有STW,也就是停机时间,其中parNew是年轻代的stw时间很短,cms时间很长,在stw期间系统不能处理请求
JVM的GC抖动问题,属于JVM调优范畴,需要结合场景进行分析,因此现在无法说是业务架构问题还是代码问题。
面对这类问题,你需要分析GC log,看下每次gc过程中,内存变化量和gc执行时间,然后在结合目前系统使用的gc算法,如CMS,G1等,进行细节分析,这时需要考虑用jmap, jhat, mat等工具进行分析。分析后才能确定是架构问题还是代码问题。
EOF
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。