Java堆空间不足导致在Tomcat7中出现java.lang.OutOfMemoryError错误。

8

我在tomcat服务器上遇到了这个错误。

Exception in thread "http-bio-8080-exec-17" 
Exception in thread "http-bio-8080-exec-2"
Exception in thread "http-bio-8080-exec-15" 
Exception in thread "http-bio-8080-exec-20"
Exception in thread "http-bio-8080-exec-18" 
java.lang.OutOfMemoryError: Java heap space.

我看过MAT,但是如何在我的Tomcat服务器中生成.hprof文件呢?
谢谢。
4个回答

16

要消除错误,请编辑该文件

/etc/default/tomcat7   

替换为:

JAVA_OPTS="-Djava.awt.headless=true -Xmx1280m -XX:+UseConcMarkSweepGC"

然后重新启动 Web 服务器。

Xmx 是新的最大内存大小,应该适合您的计算机。


1
数字 7 当然取决于Tomcat版本(对我来说是/etc/default/tomcat8)。 - pevik
这个位置是 Debian 的做法;我还会研究其他答案中的 Xms 选项。 - Rui F Ribeiro

12

将以下行添加到/path/to/tomcat/bin/setenv.sh中(如果不存在,请创建):

CATALINA_OPTS="$CATALINA_OPTS -server -Xms256m -Xmx1024m"

这会将Tomcat的堆大小增加到1024MB。


1
如果是Debian 7,通常位于/usr/share/tomcat7/bin/setenv.sh - Sinri Edogawa

5

根据您的操作系统选择解决方案:

如果是 Ubuntu

打开用户主目录下的 .bashrc 文件(它是隐藏的),在最后2-3行中添加或编辑一行:

export CATALINA_OPTS="-Xms512m -Xmx1024m"

否则,Windows:
在您的环境变量中添加/编辑
CATALINA_OPTS = "-Xms512m -Xmx1024m"

我正在使用Ubuntu。如果我在.bashrc文件中写入这行代码,它会做什么,请告诉我。它是增加堆大小还是导出?如果是导出,我该如何找到那个文件? - prabhu
我不建议使用.bashrc文件。你想要这个配置是系统范围的,而不是针对某个用户的。另外,一些Java实例(例如tomcat)会以它们自己的用户身份运行,在这种情况下,这个配置不会影响到Java实例。 - Rui F Ribeiro

0
  1. 前往/bin目录并创建一个名为setenv.sh的文件,用于Linux系统,或者创建一个名为setenv.bat的文件,用于Windows系统。

  2. 在setenv文件中,使用以下格式来设置堆大小,使用以下参数:

-Linux:

export CATALINA_OPTS="-Xms4096M -Xmx4096M"
 

-Windows:

set CATALINA_OPTS=-Xms4096M -Xmx4096M
  1. 确保最小值和最大值匹配。
  2. 保存文件并重新启动Tomcat。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接