-
传统项目有可能遇到的Jvm问题:服务单点故障,下载功能遇到问题
-
Minor GC触发条件:当Eden区满时,触发Minor GC
-
Full GC触发条件
-
调用System.gc()
此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发Full GC。因此,强烈建议能不使用此方法就不要使用,让虚拟机自己去管理内存。可通过-XX:+DisableExplicitGC来禁止RMI调用System.gc()。
-
老年代空间不足
老年代空间不足的常见场景为前面所讲的大对象直接进入老年代、长期存活的对象进入老年代等,当执行Full GC后空间仍然不足,则抛出OutOfMemoryError。为避免以上原因引起的Full GC,调优阶段应尽量做到让对象在Minor GC阶段被回收、让新生对象在新生代多存活一段时间以及不要创建过大对象及数组。
-
空间分配担保失败
使用复制算法的Minor GC需要老年代的内存空间作为担保,如果出现了HandlePromotionFailure担保失败,则会触发Full GC。
-
-
互联网项目有可能遇到的Jvm问题:容易出现性能瓶颈、容易出现线程溢出、容易出现内存溢出
-
死锁问题:通过jstack -m或者jconsole、jvisualVM检查
-
堆内存泄漏:
- 现象:出现OOM或者Full GC,heap使用率明显上升,经常达到Xmx
- Full GC正常出现的频率大概为一天一到两次
-
堆外内存泄漏(Rpc会使用到堆外内存)
- 现象:heap使用率很低,但是出现了OOM或者Full GC
- 解决方案:可以使用btrace跟踪DirectByteBuffer的构造函数来定位
深入浅出JVM之总结
最新推荐文章于 2022-12-21 10:13:37 发布