面对weblogic中的perm gen space错误

时间:2013-02-18 20:30:08

标签: java garbage-collection weblogic

我是weblogic的新手。 在我看到管理员控制台并登录后启动服务器后,它会抛出异常。

Root cause of ServletException.
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:335)
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:288)
Truncated. see log file for complete stacktrace

我做了很多谷歌并找到了一些初始化JAVA_OPTIONS的解决方案,如-XX:xmx等。 我试图在startdomainenv.cmd文件中设置它,但没有运气。

请帮忙。 任何指针都将受到高度赞赏。

感谢。

5 个答案:

答案 0 :(得分:13)

要设置 PermGen 尺寸,您可以使用例如-XX:PermSize=512m -XX:MaxPermSize=512m

关于 Weblogic ,设置JAVA_OPTIONS并查看这些选项是否作为参数正确传入Java进程。您也可以在startWeblogic.cmd脚本中直接设置这些参数。

要检查您的JAVA_OPTIONS是否设置正确,请将echo %JAVA_OPTIONS%添加到startWeblogic.cmd脚本中并查看输出。此外,您可以使用例如 jConsole jstat jmap ,用于监控运行时Weblogic进程的堆使用情况。这将显示 PermGen 的大小和职业。

答案 1 :(得分:7)

您可以尝试更改服务器中weblogic的内存设置。 * 去 - <weblogic path>\Middleware\user_projects\domains\fms_domain\bin\setDomainEnv.cmd *打开文件 *更改设置

if "%JAVA_VENDOR%"=="Sun" (
set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512m
set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m
) else (
set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512m
set WLS_MEM_ARGS_32BIT=-Xms512m -Xmx512m
)

根据您的要求和环境更改这些设置。

答案 2 :(得分:3)

要完成user267的响应,您还必须更改: 设置MEM_MAX_PERM_SIZE_64BIT = -XX:MaxPermSize = 256m

设置MEM_MAX_PERM_SIZE_32BIT = -XX:MaxPermSize = 256m

答案 3 :(得分:0)

在我的情况下,解决方案是编辑DOMAIN\bin\setDomainEnv.cmd文件。在服务器按预期启动之前进行了以下修改:

  • -Xms-Xmx值增加了
  • -XX:PermSize-XX:MaxPermSize值也增加了

最后,但可能最重要的是

  • if "%JAVA_VENDOR%"=="Sun" (条件已更改为if "%JAVA_VENDOR%"=="Oracle" (,以便正确识别我的JVM。

在最后一次修改之前,内存更改仅部分反映到初始化的JVM,这意味着有关PermGen Space的参数被忽略了。

答案 4 :(得分:0)

我只想分享一下为我解决问题的方法: 我采购了setDomainEnv.sh和echo $ {JAVA_OPTIONS}并注意到MEM参数不存在。

所以我将MEM_ARGS添加到JAVA_OPTIONS的最后一次设置。

像这样:
JAVA_OPTIONS =“$ {JAVA_OPTIONS} $ {MEM_ARGS}” 导出JAVA_OPTIONS

干杯