Java - OutOfMemoryError:PermGen空间

Nug*_*get 13 java memory birt

我正在开发一个工具,允许我通过访问我也创建的网站从任何软件获取统计数据.

对于那些不知道的人,Birt是一个报告工具和一个eclipse插件.

我的问题如下:

我在托管我网站的服务器上安装了tomcat,并在其上安装了Birt ReportEngine,在我的网站上,我呼叫在线查看器来获取我的报告.

问题是,从昨天起,当我发布报告时,我有这样的错误:

javax.servlet.ServletException: L'exécution de la servlet a lancé une exception
    org.eclipse.birt.report.filter.ViewerFilter.doFilter(ViewerFilter.java:68)
Run Code Online (Sandbox Code Playgroud)

引起:

java.lang.OutOfMemoryError: PermGen space
Run Code Online (Sandbox Code Playgroud)

我真的不知道要修改哪个配置文件以避免此错误.我在网上发现了一些修改eclipse.ini文件的例子,但对于mty网站,我没有使用eclipse,我没有找到任何有用的帖子.

有谁可以帮助我吗 ?

谢谢

Pie*_*nry 16

正如Thomas所说,要设置的参数是-XX:MaxPermSize.为Tomcat设置此参数的一种方法是使用CATALINA_OPTS环境变量.

对于Windows:

set CATALINA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m
Run Code Online (Sandbox Code Playgroud)

对于Linux(bash):

export CATALINA_OPTS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"
Run Code Online (Sandbox Code Playgroud)

检查startup.batcatalina.batstartup.shcatalina.sh文件在你的tomcat/bin中目录,并添加上述命令在那里.

(Xmx和Xms参数设置Java堆的最小和最大大小 - 存储对象的位置.这不是您遇到的问题,但为了完整起见,我将它们包括在内.)

  • 很高兴知道:在Java 8中,不再有PermGen空间,所以这个问题就消失了:) (2认同)

Fil*_*has 6

您无需在eclipse.ini中添加以下行

-XX:MaxPermSize=128m
Run Code Online (Sandbox Code Playgroud)

如果再次出现问题,请尝试增加该值.您还可以添加以下可选行:

-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+UseParNewGC 
Run Code Online (Sandbox Code Playgroud)

这会将JVM的垃圾收集器更改为更优化的垃圾收集器,还可以提高性能和内存使用率.

您可能还想调整-XmxXms选项的值.尝试小幅增加(与之相同-XX:MaxPermSize),因为这会增加JVM的内存占用量.

有关更详细的详细信息,请参阅此处:http: //www.eclipsezone.com/eclipse/forums/t61618.html

有关JVM参数和选项的完整列表,请访问:http: //www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html