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内存溢出问题解决办法相关推荐

  1. VUE运行项目内存溢出问题解决办法

    1. 解决方案: 第一步: npm install increase-memory-limit npm install cross-env 第二步: 在package.json文件中加入如下代码 &q ...

  2. java 内存 溢出_java内存溢出的几种原因和解决办法是什么?

    java内存溢出的几种原因和解决办法是什么? java内存溢出的几种原因和解决办法是: 第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出: 那什么样的情况就是堆栈溢出呢?当你看 ...

  3. Java内存溢出场景及解决办法

    Java内存溢出即程序在申请内存时,没有足够的空间供其使用,出现out of memory.常见于四种情况:栈溢出(StackOverflowError).堆溢出(OutOfMemoryError:j ...

  4. java 二维数组内存溢出_模拟Java内存溢出

    本文通过修改虚拟机启动参数,来剖析常见的java内存溢出异常(基于jdk1.8). 修改虚拟机启动参数 这里我们使用的是IDEA集成开发环境,选择Run/Debug Configurations 然后 ...

  5. Java内存溢出分析

    内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一 ...

  6. Java基础学习总结(30)——Java 内存溢出问题总结

    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...

  7. Android加载图片内存溢出问题解决方法

    这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处 ...

  8. Java内存溢出故障案例及Linux内存机制探究

    文章目录 Java内存溢出故障案例及Linux内存机制探究 OOM Killer触发机制分析 如何避免系统触发OOM Killer 这部分内容属于demo案例分享,解决线上运维问题,思路是最重要的 J ...

  9. 【Java内存溢出排查】gc监测以及内存突增问题排查

    前情提要 文档:[Java内存溢出排查]测试环境服务器挂... 链接:http://note.youdao.com/noteshare?id=783e7ec89950f4167867ef3ef3347 ...

最新文章

  1. JDK ThreadPoolExecutor核心原理与实践
  2. 现在的学生太强了,徒手撸了一个小米商城项目(附源码)!
  3. c# 自定义控件之小小进度条
  4. [转]Using The Entity Framework With WCF
  5. java基础英语---第二十六天
  6. jzoj5057-[GDSOI2017模拟4.13]炮塔【网络流,最大权闭合图】
  7. 瞧!公务员的工作还可以这样干
  8. C/C++函数指针与回调函数总结(函数指针数组)
  9. [转载] 七龙珠第一部——第016话 寻找石头的功夫
  10. 20 分钟学会 DBSCAN 聚类算法
  11. python通过opc读plc实例_python调用openopc读写plc
  12. 关于ADL的查找顺序
  13. walking与Matlab入门教程-介绍示例模型
  14. 尼葛洛庞帝,一个反硅谷的创业领袖
  15. 做一个jQuery插件---带“旋转木马”效果的轮播图
  16. ArcGISPro通视分析之视线分析
  17. 科比最新超酷广告《门徒》
  18. 开发的页面卡顿、慢?一文教你如何进行页面性能优化
  19. Neo4j-Cypher
  20. Java关于身份证验证的实现

热门文章

  1. 关于图片验证码Kaptcha的应用
  2. mysql57无法启动_MySQL 5.7 服务无法启动
  3. non-virtual函数、virtual函数和pure virtual函数的区别
  4. Android开发-WebView的缓存处理和性能优化 实现H5页面秒开【四】
  5. [JAVA VC] 短网址生成,HTTP请求,随想
  6. 树莓派zero,连接手机USB共享网络
  7. Android实战开发-Kotlin教程(组件篇 2.3)
  8. 用aardio实现微信自助登陆 群发
  9. JAVA常见面试问题以及答案
  10. java基础系列--Calendar类