Java - OutOfMemoryError: PermGen space

2022-09-04 07:06:14

我目前正在开发一种工具,允许我通过访问我也创建的网站从任何软件中获取统计信息。

对于那些不知道的人来说,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)

引起:

java.lang.OutOfMemoryError: PermGen space

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

有人可以帮我吗?

谢谢


答案 1

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

对于窗口 :

set CATALINA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m

对于 Linux (bash) :

export CATALINA_OPTS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"

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

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


答案 2

您无需添加以下行即可日食.ini

-XX:MaxPermSize=128m

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

-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+UseParNewGC 

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

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

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

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