Java内存溢出问题解决办法
Java内存溢出是常见问题,现介绍内存溢出问题的几种解决办法,不仅适用于TongWeb,也适用所有的Java程序。问题具体原因就不再解释了,对于初学者先知道大概解决办法就行了。本文只是举例常见解决办法,实际使用中JDK版本可能稍有差异,本文无法覆盖所有的JDK版本。此类问题还是需要使用者了解JVM的内存机制,请参看JDK文档。
以下介绍的这些JVM参数老版本TongWeb是加在startserver启动脚本中,新版本TongWeb是加在bin/external.vmoptions文件中,本文不再介绍shell或批处理文件的写法,请自学。或是在TongWeb控制台配置。
注:手写bin/external.vmoptions文件注意格式,不能在想删除的参数前加多余的#,这不是shell脚本,不需要直接删除参数即可。
1. OutOfMemoryError:PermGen space异常
这种问题常发生于Oracle JDK和Open JDK上,IBM JDK没有此问题,原因是程序中使用了大量的jar或class,使Java虚拟机装载类的空间不够,与PermSize区有关。解决这类问题就是增加JVM中的-XX:PermSize和-XX:MaxPermSize参数的大小,如:
-XX:PermSize=256m -XX:MaxPermSize=512m
另外要注意清理应用中无用的jar和class,在TongWeb上反复重部署应用后,记得重启下TongWeb,以释放PermSize区内存。
2. OutOfMemoryError: Metaspace异常
JDK8及之后版本常见异常,增大Metaspace 空间解决。
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
3. OutOfMemoryError:unable to create new native thread异常
这种情况是Java进程的线程数太多了,有可能是TongWeb的线程数设置过多,也有可能是应用起的线程数过多。通过Oracle JDK 的jstack命令:jstack <PID> 打出线程堆栈可以看到线程的个数和状态。IBM JDK可用kill -3 <PID>命令打出,在进程的起始目录下生成javacore开头的线程分析文件。
4. OutOfMemoryError:GC overhead limit exceeded异常
在JVM的启动参数中增加-XX:-UseGCOverheadLimit 即可解决,但后续可能出现Java heap space异常,还是内存不足引起的。
5. OutOfMemoryError:Java heap space异常
这种问题的原因是JVM中创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了。初步解决办法就是增加JVM中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小,如:-Xms2048m –Xmx2048m,以及调整垃圾回收策略。如果无论怎样优化JVM参数都会Java heap space,则肯定是应用中存在内存泄露的地方
了,具体分析方法是:
(1) 要求出现OutOfMemoryError:Java heap space时不要重启Java进程,保留进程继续执行如下操作。
(2) 利用JDK的jps –v命令查出Java的进程号。
(3) 通过jmap –histo <PID> > mem.txt 打出文本日志,生成过程很快,文件很小。
(4) 生成完整的内存镜像文件命令:jmap -dump:live,format=b,file=heap.hprof <PID> 在当前执行命令目录下生成,如果内存设为2G,则生成的内存镜像文件也有2G。
(5) 如果认为手工生成heap.bin文件麻烦可以增加JVM参数如下,当内存溢出时自动生成heap.bin。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/heap.hprof
当采用IBM JDK时,内存溢出时通常会默认在Java进程的起始目录下生成heapdump开头的内存镜像文件。
(6) 生成的mem.txt文件可以用文本工具打开直接看,内存镜像文件可以用MemoryAnalyzer、HeapAnalyzer等内存分析工具分析。下载地址如: Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation。 分析这些文件需要用大内存机器才行,建议用64位windows机器,安装64位MemoryAnalyzer软件,物理内存至少为内存镜像文件的3倍。
Java内存溢出问题解决办法相关推荐
- VUE运行项目内存溢出问题解决办法
1. 解决方案: 第一步: npm install increase-memory-limit npm install cross-env 第二步: 在package.json文件中加入如下代码 &q ...
- java 内存 溢出_java内存溢出的几种原因和解决办法是什么?
java内存溢出的几种原因和解决办法是什么? java内存溢出的几种原因和解决办法是: 第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出: 那什么样的情况就是堆栈溢出呢?当你看 ...
- Java内存溢出场景及解决办法
Java内存溢出即程序在申请内存时,没有足够的空间供其使用,出现out of memory.常见于四种情况:栈溢出(StackOverflowError).堆溢出(OutOfMemoryError:j ...
- java 二维数组内存溢出_模拟Java内存溢出
本文通过修改虚拟机启动参数,来剖析常见的java内存溢出异常(基于jdk1.8). 修改虚拟机启动参数 这里我们使用的是IDEA集成开发环境,选择Run/Debug Configurations 然后 ...
- Java内存溢出分析
内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一 ...
- Java基础学习总结(30)——Java 内存溢出问题总结
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...
- Android加载图片内存溢出问题解决方法
这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处 ...
- Java内存溢出故障案例及Linux内存机制探究
文章目录 Java内存溢出故障案例及Linux内存机制探究 OOM Killer触发机制分析 如何避免系统触发OOM Killer 这部分内容属于demo案例分享,解决线上运维问题,思路是最重要的 J ...
- 【Java内存溢出排查】gc监测以及内存突增问题排查
前情提要 文档:[Java内存溢出排查]测试环境服务器挂... 链接:http://note.youdao.com/noteshare?id=783e7ec89950f4167867ef3ef3347 ...
最新文章
- JDK ThreadPoolExecutor核心原理与实践
- 现在的学生太强了,徒手撸了一个小米商城项目(附源码)!
- c# 自定义控件之小小进度条
- [转]Using The Entity Framework With WCF
- java基础英语---第二十六天
- jzoj5057-[GDSOI2017模拟4.13]炮塔【网络流,最大权闭合图】
- 瞧!公务员的工作还可以这样干
- C/C++函数指针与回调函数总结(函数指针数组)
- [转载] 七龙珠第一部——第016话 寻找石头的功夫
- 20 分钟学会 DBSCAN 聚类算法
- python通过opc读plc实例_python调用openopc读写plc
- 关于ADL的查找顺序
- walking与Matlab入门教程-介绍示例模型
- 尼葛洛庞帝,一个反硅谷的创业领袖
- 做一个jQuery插件---带“旋转木马”效果的轮播图
- ArcGISPro通视分析之视线分析
- 科比最新超酷广告《门徒》
- 开发的页面卡顿、慢?一文教你如何进行页面性能优化
- Neo4j-Cypher
- Java关于身份证验证的实现