【问题标题】:facing perm gen space error in weblogic在 weblogic 中面临 perm gen 空间错误
【发布时间】:2013-02-18 20:30:07
【问题描述】:

我是 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 文件中设置它,但没有运气。

请帮忙。 任何指针将不胜感激。

谢谢。

【问题讨论】:

标签: java garbage-collection weblogic


【解决方案1】:

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

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

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

【讨论】:

  • 这行得通,只是要小心,因为 JAVA_OPTIONS 会影响您机器上可能使用此系统变量的所有 java。如果问题是特定于 Weblogic 的,请按照 Dileep 指出的那样更改 setDomainEnv.cmd。我之所以提到这一点,是因为我设置了这个变量来让它工作,只是为了让我的其他 java 版本出现问题以进行其他代码工作。
【解决方案2】:

您可以尝试更改服务器中 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
)

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

【讨论】:

    【解决方案3】:

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

    设置 MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=256m

    【讨论】:

      【解决方案4】:

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

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

      最后,但可能是最重要的

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

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

      【讨论】:

        【解决方案5】:

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

        所以我在 JAVA_OPTIONS 的最后设置中添加了 MEM_ARGS。

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

        干杯

        【讨论】:

          猜你喜欢
          • 2013-05-15
          • 1970-01-01
          • 2011-07-02
          • 2016-01-03
          • 2016-09-10
          • 1970-01-01
          • 2021-04-21
          • 2013-03-10
          • 2017-01-13
          相关资源
          最近更新 更多