【发布时间】:2018-09-18 15:17:57
【问题描述】:
我已经搜索过有关此问题的帖子,但我没有看到像我这样的情况。
我的 java 控制台显示错误消息"pool-1-thread-xxxx" java.lang.OutOfMemory 如下图所示:
- 红线:CPU使用率
- 绿线:内存使用情况
我已将 RAM 从6G 增加到10G,并在启动程序之前在*.bat 文件中设置-Xms=8G -Xmx=8G -Xmn=3G。我也一直在看性能监视器,但内存总是在 20% 左右。我不知道这怎么会发生。有什么想法吗?
这是我的run.bat 代码。
@echo off
javapro @java -Xoptimize -Xms8G -Xmx8G -Xmn3G -Xss1024k -XX:+UseConcMarkSweepGC -cp javaPro.exe;
cls
run.bat
- 操作系统:windows server 2012 R2
- Java 版本:jre1.8.0_171
- 内存:10G
- CPU:2.5 GHz Intel Xeon(R)(超线程)
【问题讨论】:
-
能否给出你的线程池的代码?
-
很难说没有实际代码。您在
pool-1上的线程号是1395,因此您至少有1395 个线程在运行。消息OOM: unable to create native thread表示没有可用的系统资源来分配新线程。请发布一些代码,也许您在那里使用CachedThreadPoolExecutor,但任务不够短,所以系统炸毁了。查看更多关于OOM explanation here -
您似乎在应用程序中创建了许多线程。您应该向我们展示您尝试执行的主要代码,您可能在那里有问题,并且与您的内存配置无关。是否会在您尝试对应用程序执行的操作中创建这么多新线程?
-
很遗憾我没有源代码。是否有可能增加线程池限制?
标签: java out-of-memory threadpool