java常见问题

佚名 / 2023-05-07 / 原文

java.lang.OutOfMemoryError: Java heap space

 

解决问题之前先来分析一下为什么会出现内存溢出的问题.

有两种可能性:

一种是应用有问题, 本该回收的内存没有进行回收导致的内存溢出, 这种情况就需要修改代码了.

第二种情况则是服务器资源不够或JVM参数设置过小导致的内存溢出,这种情况需要更换服务器或修改启动参数

我们可以使用对应的工具或命令来定位到问题, 然后分析是哪种情况, 最后再解决问题.

 

 

 

 

内存溢出java.lang.OutOfMemoryErrory后面一般会跟上内存溢出的区域 PermGen space(方法区),

heap space(堆内存)

如果是PermGen space方法区内存溢出,可尝试加大MaxPermSize

如果是heap space 堆内存溢出,可尝试修改Xmx

-Xms <size>  设置JVM初始化堆内存大小

-Xmx <size设置JVM最大的堆内存大小

 

-Xms1024M -Xmx1024M

 

-XX:+HeapDumpOnOutOfMemoryError 设置
1、配置方法

在JAVA_OPTIONS变量中增加

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}。
例如:export JAVA_OPTS="-Xms2048M -Xmx2048M -Xmn682M -XX:MaxPermSize=96M"

2、参数说明

(1)-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。

(2)-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。
————————————————

 

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/crasks/my-heap-dump.hprof


原文链接:https://blog.csdn.net/u011488009/article/details/105700505

 

这里配置Java堆内存最大为 1024MB。可以使用 g/G 表示 GB, m/M 代表 MB, k/K 表示 KB.

 
 

JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"

-server:一定要作为第一个参数,在多个CPU时性能佳