Fedora 30 и OpenJDK 1.8.0_212: java.lang.OutOfMemoryError: невозможно создать новый собственный поток - PullRequest
1 голос
/ 08 июня 2019

Я не понимаю, почему у моей Fedora 30 64-битной с 12 ГБ ОЗУ возникают проблемы при создании более 10.000 потоков с помощью приложения Java 8.

Мне нужно создать много потоков, потому что приложение Java является симулятором, и я не могу ничего изменить в реализации кода Java.

Я использую 64-битный OpenJDK, ограничивающий размер стека для потоков с параметром «Xss»:

openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)


java  -Xmx3500m -Xss228k -jar Uni.jar

Я пытался понять, почему ОС Fedora Linux не выделяет больше, чем10.000 потоков, но ничего.Любой параметр кажется правильным и превышает порог 10 000.

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 47765
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) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 47765
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

$ cat /proc/sys/kernel/pid_max
32768
$ cat /proc/sys/kernel/threads-max
95530

Я посмотрел много постов здесь, но любое предлагаемое решение не работает, и я предполагаю, что оно может быть связано с Fedora 30 или версией JVM, которую я использую.

Есть подсказка?

===== РЕДАКТИРОВАТЬ ====

Java-код очень прост, потому что у меня есть:

new Thread()
{
 ...
}

тот же код отлично работает в Windows 10!

Память Fedora Linux, когда она достигает 10000 потоков и выдает ошибку, составляющую около 1,5 ГБ памяти.

===== РЕДАКТИРОВАТЬ ====

Я смоделировал такое же количество потоков с помощью простой программы на C, которая выделяет 12K потоков на этой машине Linux Fedora, и после 10K у меня естьошибка «Ресурс временно недоступен».

Так что проблема связана не с Java, а с настройками Linux.

...