1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java内存溢出问题解决办法

Java内存溢出问题解决办法

时间:2021-12-12 18:38:46

相关推荐

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倍。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。