【发布时间】:2010-08-19 09:23:10
【问题描述】:
在 Solaris x86 上的 32 位 jvm 上运行 Java EE 应用程序时,我收到 OutOfMemoryError:Cant create native thread(或类似的东西)。
这是因为据我了解,jvm 没有足够的内存用于新线程的堆栈。
我同时使用 JConsole 和 VisualVM 1.3 来监控应用程序,但我不知道这些工具中的“stackmemory”是什么。在 VisualVM 中,我可以监控 heapspace 和 permgen 空间,而 JConsole 显示更多的内存区域。是否为堆栈内存预留了这些内存区域?我知道这当然不是堆空间,而是 permgen 或非堆(在 JConsole 中称为)
【问题讨论】:
-
机器有足够的swap吗?
-
$>swap -s 总计:已分配 1609736k 字节 + 760644k 保留 = 2370380k 已使用,57741028k 可用。我已将堆大小设置为 3072m,因此理论上 jvm 应该能够使用另外 1024mb 的非堆空间(我猜实际上要少一些)
标签: java multithreading memory monitor