当前位置: 首页 > news >正文

java虚拟机内存溢出的三个原因_JVM发生内存溢出的原因分析及解决方案

原标题:JVM发生内存溢出的原因分析及解决方案

1. Java 堆空间

发生频率:5颗星

造成原因

无法在 Java 堆中分配对象

吞吐量增加

应用程序无意中保存了对象引用,对象无法被 GC 回收

应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长

解决方案

使用 -Xmx 增加堆大小

修复应用程序中的内存泄漏

2. GC 开销超过限制

发生频率:5颗星

造成原因

Java 进程98%的时间在进行垃圾回收,恢复了不到2%的堆空间,最后连续5个(编译时常量)垃圾回收一直如此。

解决方案

使用 -Xmx 增加堆大小

使用 -XX:-UseGCOverheadLimit 取消 GC 开销限制

修复应用程序中的内存泄漏

3. 请求的数组大小超过虚拟机限制

发生频率:2颗星

造成原因

应用程序试图分配一个超过堆大小的数组

解决方案

使用 -Xmx 增加堆大小

修复应用程序中分配巨大数组的 bug

4. Perm gen 空间

发生频率:3颗星

造成原因

Perm gen 空间包含:

类的名字、字段、方法

与类相关的对象数组和类型数组

JIT 编译器优化

当 Perm gen 空间用尽时,将抛出异常。

解决方案

使用 -XX: MaxPermSize 增加 Permgen 大小

不重启应用部署应用程序可能会导致此问题。重启 JVM 解决

5. Metaspace

发生频率:3颗星

造成原因

从 Java 8 开始 Perm gen 改成了 Metaspace,在本机内存中分配 class 元数据(称为 metaspace)。如果 metaspace 耗尽,则抛出异常

解决方案

通过命令行设置 -XX: MaxMetaSpaceSize 增加 metaspace 大小

取消 -XX: maxmetsspacedize

减小 Java 堆大小,为 MetaSpace 提供更多的可用空间

为服务器分配更多的内存

可能是应用程序 bug,修复 bug

6. 无法新建本机线程

发生频率:5颗星

造成原因

内存不足,无法创建新线程。由于线程在本机内存中创建,报告这个错误表明本机内存空间不足

解决方案

为机器分配更多的内存

减少 Java 堆空间

修复应用程序中的线程泄漏。

增加操作系统级别的限制

ulimit -a

用户进程数增大 (-u) 1800

使用 -Xss 减小线程堆栈大小

7. 杀死进程或子进程

发生频率:1颗星

造成原因

内核任务:内存不足结束器,在可用内存极低的情况下会杀死进程

解决方案

将进程迁移到不同的机器上

给机器增加更多内存

与其他 OOM 错误不同,这是由操作系统而非 JVM 触发的。

8. 发生 stack_trace_with_native_method

发生频率:1颗星

造成原因

本机方法(native method)分配失败

打印的堆栈跟踪信息,最顶层的帧是本机方法

解决方案

使用操作系统本地工具进行诊断返回搜狐,查看更多

责任编辑:

相关文章:

  • mysql更新多个字段php_PHP:如果语句无意中导致多个MySQL列更新?
  • properties java jar_propertiesutil jar包
  • python段落注释的语法格式是_Python 基础语法
  • python读取xml配置_python解析xml配置文件
  • java 接口数据类型_Java中的基本数据类型与引用数据类型
  • java 红包接口开发_java调用微信现金红包接口的心得与体会总结
  • java项目中学到了什么_我们能从Java的HelloWorld中学到什么?
  • js java md5加密_MD5加密 (java、js)
  • junit mysql_使用Junit单元测试及操作MySQL数据库时出现错误及解决方法
  • java最简单的算术程序_java – ANTLR4访问者模式简单的算术示例
  • java版我的世界有溺尸_我的世界溺尸怎么找
  • mysql制作html静态网页6_PHP生成HTML静态页面实例代码
  • Thread核心java语句_【经典干货】《Java 多线程编程核心技术》学习笔记及总结(中)...
  • java核心技术卷2 第9版 pdf,Java核心技术 卷II 高级特性(原书第9版) PDF
  • php 下载文件 进度条显示,Curl下载文件显示实时进度条(附代码)
  • JavaScript-如何实现克隆(clone)函数
  • Asm.js的简单介绍
  • Bytom交易说明(账户管理模式)
  • golang中接口赋值与方法集
  • HTTP那些事
  • Java深入 - 深入理解Java集合
  • JS学习笔记——闭包
  • MySQL数据库运维之数据恢复
  • PHP的Ev教程三(Periodic watcher)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 前嗅ForeSpider教程:创建模板
  • 如何解决微信端直接跳WAP端
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 小程序button引导用户授权
  • 新手搭建网站的主要流程
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (超详细)语音信号处理之特征提取
  • (二)fiber的基本认识
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (原)Matlab的svmtrain和svmclassify
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .java 9 找不到符号_java找不到符号
  • .net core 6 集成和使用 mongodb
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET开发人员必知的八个网站
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @ResponseBody
  • @vue/cli 3.x+引入jQuery
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [Ariticle] 厚黑之道 一 小狐狸听故事