当前位置: 首页 > 知识库问答 >
问题:

java.lang.OutOfMemoryError:无法创建新的本机线程,同时启动野蝇

尉迟国发
2023-03-14

我想在我的虚拟服务器上启动一个野蝇。每次我运行./wilfly/bin/standalone.sh我在无融资创业时都会收到以下错误:

MSC000001: Failed to start service jboss.ironjacamar.idle-remover: org.jboss.msc.service.StartException in service jboss.ironjacamar.idle-remover: java.lang.OutOfMemoryError: unable to create new native thread
    at org.jboss.as.connector.subsystems.jca.IdleRemoverService.start(IdleRemoverService.java:53)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_45]
Caused by: java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method) [rt.jar:1.8.0_45]
    at java.lang.Thread.start(Thread.java:714) [rt.jar:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950) [rt.jar:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1357) [rt.jar:1.8.0_45]
    at java.util.concurrent.Executors$DelegatedExecutorService.execute(Executors.java:668) [rt.jar:1.8.0_45]
    at org.jboss.jca.core.connectionmanager.pool.idle.IdleRemover.start(IdleRemover.java:137)
    at org.jboss.as.connector.subsystems.jca.IdleRemoverService.start(IdleRemoverService.java:51)
    ... 5 more

ulimited-a让我得到以下信息:

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 385262
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 385262
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

如您所见,虚拟内存是无限的,最大用户进程非常大。
在启动本文中描述的jvm时,我还使用-Xss256kb增加/减少了堆栈大小,但没有任何成功。
同样在standalone.xml中为每个子系统增加max-thread50也不起作用(在本文中描述)。
您还有其他想法如何解决这个问题吗?

Java版本是

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

共有3个答案

咸浩初
2023-03-14

您需要增加允许打开的文件数量。错误的关键是无法创建新的本机线程。在Linux,如果您执行ulimited-n 8192,应该会修复它。

秦跃
2023-03-14

你的盒子有多少个CPU?IIRC,野蝇中的一些线程池正在创建与CPU计数相关的线程,所以如果你有异常多的CPU,那可能是个问题。尽管它说它不能创建新线程,但它可能仍然是内存问题(而不是max用户进程),因为每个线程都需要内存。

否则,您可能会尝试创建堆转储以找出有多少线程是由野蝇创建的。

也许一个完整的启动日志也可以提供更多的信息

明阳旭
2023-03-14

要修复OutOfMemoryError,请使用Xmx2048m开关启动java进程。

希望这有帮助。

 类似资料: