点击上方“Java知音”,选择“置顶公众号”
技术文章第一时间送达!
cnblogs.com/williamjie/p/11164572.html
1. Java 堆空间
发生频率:5颗星
造成原因
吞吐量增加
应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长
解决方案
修复应用程序中的内存泄漏
2. GC 开销超过限制
发生频率:5颗星
造成原因
解决方案
使用 -XX:-UseGCOverheadLimit 取消 GC 开销限制
3. 请求的数组大小超过虚拟机限制
发生频率:2颗星
造成原因
解决方案
修复应用程序中分配巨大数组的 bug
4. Perm gen 空间
发生频率:3颗星
造成原因
Perm gen 空间包含:
与类相关的对象数组和类型数组
当 Perm gen 空间用尽时,将抛出异常。
解决方案
不重启应用部署应用程序可能会导致此问题。重启 JVM 解决
5. Metaspace
发生频率:3颗星
造成原因
解决方案
取消 -XX: maxmetsspacedize
为服务器分配更多的内存
6. 无法新建本机线程
发生频率:5颗星
造成原因
解决方案
- ulimit -a
- 用户进程数增大 (-u) 1800
- 内核任务:内存不足结束器,在可用内存极低的情况下会杀死进程
- 将进程迁移到不同的机器上
- 给机器增加更多内存
- 与其他 OOM 错误不同,这是由操作系统而非 JVM 触发的。
- 本机方法(native method)分配失败
- 打印的堆栈跟踪信息,最顶层的帧是本机方法
- 使用操作系统本地工具进行诊断
减少 Java 堆空间
增加操作系统级别的限制
用户进程数增大 (-u) 1800
使用 -Xss 减小线程堆栈大小
7. 杀死进程或子进程
发生频率:1颗星
造成原因
解决方案
给机器增加更多内存
8. 发生 stack_trace_with_native_method
发生频率:1颗星
造成原因
打印的堆栈跟踪信息,最顶层的帧是本机方法
解决方案
推荐阅读(点击即可跳转阅读)********
**2. **面试题内容聚合
**3. **设计模式内容聚合
**4. **Mybatis内容聚合
**5. **多线程内容聚合
觉得不错?欢迎转发分享给更多人
原文始发于微信公众号(Java知音):JVM 发生内存溢出的 8 种原因、及解决办法