首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >部署取消部署时Weblogic内存泄漏

部署取消部署时Weblogic内存泄漏
EN

Stack Overflow用户
提问于 2012-07-27 14:35:40
回答 3查看 7.7K关注 0票数 1

在使用-Xmx1024m -Xms1024m的32位JRockit R 28.2.4-14上运行的WebLogic10.3.5在我们的Java文件的5-8个取消部署-重新部署周期之后总是会出现本机内存不足的情况。

根据错误消息和VisualVM中显示的内容,不是Java Heap变得太满,而是可用的系统内存不足。

代码语言:javascript
运行
复制
java.lang.OutOfMemoryError: class allocation, 865324184 loaded, 464M footprint,
in check_alloc (src/jvm/model/classload/classalloc.c:215).

Attempting to allocate 1G bytes

There is insufficient native memory for the Java
Runtime Environment to continue.

Possible reasons:
  The system is out of physical RAM or swap space
  In 32 bit mode, the process size limit was hit
Possible solutions:
  Reduce memory load on the system
  Increase physical memory or swap space
  Check if swap backing store is full
  Use 64 bit Java on a 64 bit OS
  Decrease Java heap size (-Xmx/-Xms)
  Decrease number of Java threads
  Decrease Java thread stack sizes (-Xss)
  Disable compressed references (-XXcompressedRefs=false)

        at sun.misc.Unsafe.defineClass(Native Method)
        at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
        at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
        at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
        at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:95)
        at sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:313)
        at java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1322)

我理解建议的可能的解决方案,但是如果应用程序只部署一次,那么一切都很好,似乎在取消部署时类没有被正确释放。取消部署后的堆转储显示内存中还有许多我们的类。那么它们不应该被垃圾收集吗?

指向GC根目录的路径显示了一个线程<JNI Local> java.lang.Thread @ 0x129ac778 JDWP Transport Listener: dt_socket Native Stack, Thread。服务器上没有流量,我不知道为什么它会保持活动状态。

EN

回答 3

Stack Overflow用户

发布于 2012-07-27 14:42:05

这种内存泄漏很可能是在perm-gen空间中引起的(这就是在Hotspot JVM上调用它的方式)。JRockit没有专门的Perm-Gen空间,但使用“常规”堆空间。看看下面的网站,我发现它们对理解这里发生的事情非常有帮助:

What is a PermGen leak

Busting PermGen Myths

票数 2
EN

Stack Overflow用户

发布于 2012-07-27 19:18:57

我发现Eclipse MAT对调试PermGen泄漏非常有帮助:

我的方法通常是这样的:

在undeployment

  • Find你的一个应用程序类之后,
  • 做一个堆转储(不管是哪一个,都应该泄漏)。或者,显示duplicate classes.
  • Display到GC根目录

的路径

为什么修复看起来像这样取决于原因。

票数 0
EN

Stack Overflow用户

发布于 2012-07-30 15:37:56

最有可能的情况是,某些类被类加载器占用,这会导致整个应用程序在重新部署时泄漏。你可以读到关于this article about classloaders的文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11682658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档