代码之家  ›  专栏  ›  技术社区  ›  Daniel

内存转储比可用内存小得多

  •  2
  • Daniel  · 技术社区  · 16 年前

    我有一个Tomcat应用服务器,配置为在OOM上创建内存转储,它是以-xmx1024m启动的,所以他应该可以使用一个千兆字节。

    现在我发现了一个这样的垃圾堆,它只包含260MB的未保存的内存。怎么可能垃圾场比他应该有的大小小得多呢?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Affe    16 年前

    PermGen空间是独立于堆进行管理的,即使总体上有足够的空闲内存,也可能会耗尽。一些Web框架(尤其是JSF)是真正的生猪,很容易导致默认配置耗尽。它可以用-xx:maxpermsize=m增加。

    请记住,系统空间受堆和permgen之和的限制,因此在开始获取无法创建本机线程OOM异常之前,如果不将堆减少permgen的增加量,则可以消耗较少的总资源。

        2
  •  2
  •   stacker    16 年前

    只有有关已分配内存使用情况的信息才会转储到文件中。 堆转储不是堆的二进制映像,它包含有关数据类型等的信息,可能会超出可用内存。

    Text (classic) Heapdump file format