2015-06-21 5 views
0

Я хочу запустить wildfly на своем виртуальном сервере. Каждый раз, когда я бегу ./wildfly/bin/standalone.sh я получаю следующее сообщение об ошибке во время самонастройки:java.lang.OutOfMemoryError: не удалось создать новый собственный поток при запуске wildfly

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 

ulimit -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 

Как вы можете видеть, виртуальная память неограниченные и максимальные пользовательские процессы - это довольно hugh.
Я также увеличил/уменьшил размер стека с -Xss256kb при запуске jvm, как описано in this post, но без каких-либо успехов.
Также увеличивается max-threads на 50 в standalone.xml для каждой подсистемы не работает (описано in this post).
У вас есть другие идеи, как решить эту проблему?

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) 
+2

Попробуйте увеличить 'открытые файлы', см. Http://stackoverflow.com/a/15736766/3080094 – vanOekel

+0

сколько физической памяти находится на коробке? –

+0

@vanOekel Я установил его теперь на 65536, но ошибка все еще происходит. – Allipon

ответ

1

Чтобы исправить OutOfMemoryError, запустить свой процесс Java с помощью -Xmx2048m переключателя.

Надеюсь, это поможет.

+0

Это не работает, поскольку сообщение об ошибке не указывает на пустое место, а на «невозможно создать новый собственный поток». Я также пробовал это, но ошибка все еще происходит. – Allipon

+0

Вы пытались увеличить открытые дескрипторы файлов, как было предложено @vanOkeal? Это выглядит как последний вариант. Вы пробовали почти все. –

+0

Я сделал. В теории я понимаю, что происходит, но практически я понятия не имею, почему. На моей локальной машине Dev все работает отлично с теми же настройками для wildfly. – Allipon

0

Сколько процессоров имеет ваша коробка? IIRC, некоторые пулы потоков в wildfly создают потоки по отношению к количеству CPU, поэтому, если у вас есть необычно много процессоров, это может быть проблемой. Хотя он говорит, что не может создавать новые потоки, это может быть проблемой с памятью (а не с max user processes), потому что каждый поток также нуждается в памяти.

В противном случае вы можете попытаться создать кучу кучи, чтобы узнать, сколько потоков создано wildfly.

Может быть, полный лог запуска также может предоставить больше информации

+0

Спасибо за ваш ответ. На сервере есть только один CPU. Я попытаюсь создать кучу кучи. – Allipon

+0

добавлен указатель на журнал запуска – user140547

0

Вам нужно увеличить количество открытых файлов, разрешенных. Ключом к ошибке является unable to create new native thread. В Linux, если вы выполните ulimit -n 8192, это должно исправить.

Смежные вопросы