在Solaris x86上的32位jvm上运行Java EE应用程序时,我得到一个OutOfMemoryError:无法创建本机线程(或类似的东西)。
这是因为据我所知,jvm没有足够的内存用于新线程的堆栈。
我使用JConsole和VisualVM 1.3来监视应用程序,但我不知道在这些工具中调用“stackmemory”是什么。在VisualVM中,我可以监视堆空间和permgen空间,而JConsole则显示更多的内存区域。是否有任何这些内存区域用于堆栈存储?我知道它当然不是堆空间,而是permgen或非堆(在JConsole中调用)
答案 0 :(得分:0)
您也可以尝试JProfiler。 在JProfiler中,您可以从CPU概要分析视图中的线程视图和线程状态获取提示。以下是screencast。
您还可以检查以下内容以调试您的问题:(从链接引用)如果您遇到此异常,可以执行以下操作。
您的代码的某些部分可能会创建许多线程。
尝试在代码中使用ThreadPoolExecutor(线程池)来限制应用程序中的线程,并相应地调整线程池大小以获得更好的性能。