我已经部署了一个非常大的应用程序,当我尝试启动服务器时给出
“内存不足错误”:PermGen空间
由于我使用tomcat 5.5,我在bin文件夹中没有“setenv.bat”。所以我设置了“catalina.bat”中的JAVA_OPTS。我已经给过了。
set JAVA_OPTS=-server -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m -XX:NewSize=192m -XX:MaxNewSize=384m -Djava.awt.headless=true -Dhttp.agent=Sakai -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dsun.lang.ClassLoader.allowArraySyntax=true
但问题仍然存在。在上面的代码片段中是否需要指定或需要更改以便我的服务器上升。
谢谢, Jeyaa。
答案 0 :(得分:0)
如果您使用的是Sun JVM,最好的办法是下载Visual VM 1.3.3并安装所有插件。它会让你看到线程,内存等。
首先启动Visual VM,然后通过在Visual VM中选择其JRE来启动Tomcat。你将能够看到当时发生了什么。
那里你有很多记忆。您必须在代码中执行某些操作才能实现此目的。
答案 1 :(得分:0)
我建议你使用包含在HotSpot Java发行版中的工具JVisualVM来检查你的PermGen空间大小并查看GC stat
答案 2 :(得分:0)
尝试使用-XX:MaxPermSize=1024m
将MaxPermSize加倍。如果问题仍然存在,那么还尝试使用-XX:+HeapDumpOnOutOfMemoryError
标志在OutOfMemoryError上启用堆转储,然后使用Eclipse Memory Analyser打开内存转储以找出占用所有内存的内容。内存转储需要很长时间,所以请耐心等待。可能是您需要插入泄漏。例如,无休止地生成类,或者许多字符串被intern
'编辑。
我曾经有过内存泄漏,因为我是从动态生成的字符串创建了Log4J记录器,结果发现Log4J实际上是对所有这些字符串进行了实例化。这意味着我们的程序在运行3天后在PermGen空间中与OOM崩溃。不好。
答案 3 :(得分:0)
由于您正在部署Sakai,因此这些JAVA_OPTS应该是您进行小型安装所需的全部内容,因为它们已经使用了很多年了:
-server -XX:+ UseParallelGC -Xmx1024m -XX:PermSize = 512m -XX:MaxPermSize = 512m -Djava.awt.headless = true -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING = false -Dsun.lang .ClassLoader.allowArraySyntax = true -Dhttp.agent = Sakai
请注意,您对特定问题的要求是增加PermSize设置。