Java内存溢出问题解决办法

article/2025/11/3 2:10:28

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

                                      


http://chatgpt.dhexx.cn/article/P9fWAHgM.shtml

相关文章

线上java 内存溢出分析

1.Eclipse Memory Analysis Tools (MAT) 是一个分析 Java堆数据的专业工具&#xff0c;用它可以定位内存泄漏的原因。 工具地址 : https://www.eclipse.org/mat/ 2从linxu服务器下载内存溢出文件.hprof&#xff0c;导入到MAT 3.选择”Leak Suspects : includes leak suspect…

docker java 内存溢出_java内存溢出

与此问题类似jmeter Error occurred during initialization of VM Could not reserve enough space_萧木易的博客-CSDN博客 前言 微服务和docker的结合应该是现在服务端的主流技术&#xff0c;随着springboot的出现&#xff0c;有很多公司已经把微服务迁移到了docker容器中&a…

Java 内存溢出(一)原因、复现、排查

目录 一、内存溢出原因二、内存溢出实例1、堆溢出2.虚拟机栈和本地方法栈溢出3.方法区和运行时常量池溢出4.本机直接内存溢出 三、内存溢出排查 内存溢出&#xff1a; 是指应用系统中存在无法回收的内存或使用的内存过多&#xff0c;最终使得程序运行要用到的内存大于虚拟机能提…

Java内存溢出问题排查分析

目录 前言 一、MAT&#xff08;Memory Analyzer Tool&#xff09; 二、软件初识 三、捕获dump文件 1、主动方式 2、被动方式 四、分析dump文件 总结 前言 项目运行过程中&#xff0c;我们可能会遇到Java内存溢出Out Of Memory。此时我们可以借助内存分析工具MAT(Memory Analyz…

ajax书写方式及内部主要参数

书写方式 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> <script src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> </script> <script&…

掌握ajax3:Ajax 中的高级请求和响应

对于很多 Web 开发人员来说&#xff0c;只需要生成简单的请求并接收简单的响应即可&#xff1b;但是对于希望掌握 Ajax 的开发人员来说&#xff0c;必须要全面理解 HTTP 状态代码、就绪状态和 XMLHttpRequest 对象。在本文中&#xff0c;Brett McLaughlin 将向您介绍各种状态代…

Ajax技术简介(http://www.51cto.com)

Ajax技术开发指南Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是结合了Java技术、XML以及JavaScript等编程技术&#xff0c;可以让开发人员构建基于Java技术的Web应用&#xff0c;并打破了使用页面重载的惯例。Ajax是使用客户端脚本与Web服务器交换数据的Web应…

AJAX初级

AJAX介绍 AJAX Asynchronous JavaScript and XML(异步的JavaScript和XML). 同步与异步的区别 同步的理解; 同步就是指一个进程在执行某个请求的时候&#xff0c;若该请求需要一段时间才能返回信息&#xff0c;那么这个进程将会一直等待下去&#xff0c;直到收到返回信息才继…

Ajax学习笔记-get请求参数-3

传统的表单内容会变成请求参数&#xff0c;自动拼接到对应的位置。get会放在请求地址的后面&#xff0c;post会放在请求体当中。 但是在Ajax中&#xff0c; 我们需要自己拼接请求参数&#xff0c;然后根据请求参数的不同&#xff0c;将请求参数放置在不同的位置。 路由&#xf…

【AJAX学习笔记三】ajax的post请求及其请求主体请求头的设置

AJAX的post请求及其请求行请求头的设置 一、POST请求 参照上一节的笔记&#xff0c;我们实现了get请求的方法&#xff0c;而POST方法的简单实现和GET方法类似&#xff0c;只需要在前端中将get请求修改为post。 xhr.open(POST, http://127.0.0.1:8000/server);在后端中将其接受…

Ajax参数对照及Success内容

本文是好久之前参考网上大佬教程&#xff0c;边学习边参考边做笔记&#xff0c;整理的内容&#xff0c;分享下大家学习~ 如果这位大佬看见&#xff0c;请评论留下您的名字和博客地址&#xff0c;我这里修改为【转载】 Ajax参数 jQuery 拥有完整的 Ajax 兼容套件。其中的函数和…

学习AJAX必知必会(2)~Ajax基本使用,设置请求行、请求体、请求头,服务端响应JSON数据

一、Ajax的基本使用 1、核心对象 XMLHttpRequest&#xff0c;AJAX 的所有操作都是通过该对象进行的。 2、发送ajax请求&#xff08;4个步骤&#xff09;&#xff1a; 创建xhr对象&#xff0c;然后open方法初始化&#xff0c;设置请求方式和请求路径&#xff0c;接着send方法…

尚硅谷AJAX教程

优点&#xff1a;无需刷新页面获取数据&#xff0c;允许你根据用户事件来更新部分页面内容 缺点&#xff1a;没有浏览历史&#xff0c;不能回退&#xff0c;存在跨域&#xff0c;SEO不友好 原生XHR请求 get请求 <body><button>获取数据</button><scri…

AJAX (2) — AJAX请求的基本操作、设置请求参数、发送POST请求,POST设置请求体、AJAX设置请求头信息

目录 一、AJAX请求的基本操作 1.server.js文件 2.GET.html文件 二、AJAX设置请求参数 三、AJAX发送POST请求 1.POST.html文件 2.server.js文件 四、POST设置请求体 五、AJAX设置请求头信息 1.预定义头信息 2.自定义头信息 一、AJAX请求的基本操作 先设计出一个需求&…

css ::after和::before详解

伪元素:before和:after添加的内容默认是inline元素 <style>p:before{content: "hello "}p:after{content: "you are handsome!"}</style><p>xx!</p>等价于下面的html结构:<p><span>hello </span>xxx!<span&g…

深入了解::before 和 ::after 伪元素

点击上方 前端瓶子君&#xff0c;关注公众号 回复算法&#xff0c;加入前端编程面试算法每日一题群 本文从最简单的开始&#xff0c;解释如何理解和使用::before和::after。然后再在实际使用场景中去应用它。 ::before和::after是什么? ::before和::after可以添加到选择器以创…

:after和:before的作用及使用方法

1. :before 和 :after 的主要作用是在元素内容前后加上指定内容&#xff0c;示例&#xff1a; HTML代码&#xff1a; <p>你好</p> CSS代码&#xff1a; p:before{content: Hello;color: red; } p:after{content: Tom;color: red; } 效果如图&#xff1a; 以上代码…

::before和::after伪元素的用法案例

CSS3中伪类采用单冒号写法&#xff0c;伪元素采用双冒号写法。 伪类举例——:hover,:link,:active,:target。 伪元素举例——::before,::after,::first-letter,::first-line,::selection。 一、介绍 今天写网页时遇到一个问题&#xff0c;视口的背景中插入一个小图标的话&a…

beforeSend 出现跨域问题,header里直接设置token就没问题----Day1

一开始前端调用后端接口出现跨域问题&#xff0c;右键查看元素&#xff0c;会有跨域错误提示&#xff0c;类似下图&#xff0c;后来找后端设置了一下&#xff0c;问题解决。可以登录获取token等参数了。 但是 请求设备列表时&#xff0c;beforeSend 中设置token却失败了&#x…

after和before的作用及使用方法

:after和:before的作用及使用方法 1、 :before 和 :after 的主要作用是在元素内容前后加上指定内容&#xff0c;示例&#xff1a; HTML代码&#xff1a; <p>你好</p>CSS代码&#xff1a; p:before{content: Hello;color: red; } p:after{content: Tom;color: r…