java.lang. OutOfMemoryError: не мог создать новый собственный поток: после обновления от Ubuntu 14.04 до Ubuntu 16.04

У нас есть распределенная поисковая система Java на основе Lucene, который обычно работает как много процессов, которые могут каждый иметь их собственные пулы потоков на ~100 хостах, но у нас есть dev развертывание, которое может работать на единственной двойной шестнадцатерично-базовой рабочей станции на 64 ГБ, которую мы используем для разработки.

Мы успешно запускали Ubuntu 14.04 на этих dev рабочих станциях с высокими ulimit настройками:

gada@C010390:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256189
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 51200
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) 256189
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Все процессы поисковой системы запускаются сценарием с единственного процесса.

Мы недавно обновили до Ubuntu 16.04 и теперь сталкиваемся: java.lang.OutOfMemoryError: unable to create new native thread ошибки при попытке запустить все необходимые процессы. Я искал Google и видел сообщения о новых пределах ресурса, устанавливаемых systemd, например:

https://unix.stackexchange.com/q/253903/creating-threads-fails-with-resource-temporarily-unavailable-with-4-3-kernel

Я попробовал после этого сообщения и установки

DefaultTasksMax=infinity
TasksMax=infinity
UserTasksMax=infinity

в следующем:

/etc/systemd/system.conf
/etc/systemd/user.conf
/etc/systemd/logind.conf

и перезагрузка, но это, казалось, не имело эффекта.

Я проверил dpkg, и я, кажется, работаю systemd 229-4ubuntu7.

gada@C010390:~$ dpkg -l systemd
...
ii  systemd                                  229-4ubuntu7              amd64                     system and service manager

Согласно этому сообщению:

https://bugs.launchpad.net/charms / + source/percona-cluster / + ошибка/1578080

новые пределы процесса systemd вернулись в 229-4ubuntu6, но у меня все еще есть проблемы.

Кто-то может помочь мне диагностировать, какой предел системного ресурса препятствует тому, чтобы я создал новые потоки Java в Ubuntu 16.04 и как удалить этот предел? Я предполагаю, что это происходит из-за некоторого предела systemd, так как это - большая разница между Ubuntu 14.04 и 16.04, но я не знаю, что наверняка и не знают то, что еще в 16,04 мог ограничивать создание потока. Заранее спасибо за любую справку.

0
задан 13 April 2017 в 15:37

2 ответа

У нас была идентичная проблема, и первопричина, казалось, была, что logind.conf не поддерживает "бесконечность". Вместо этого необходимо использовать точный предел (такой как UserTasksMax=32000).

Это, кажется, фиксируется в последней версии ( https://github.com/systemd/systemd/issues/3833), но по крайней мере наша Ubuntu 16.04 имела версию, которая не поддерживала infinity.

1
ответ дан 28 September 2019 в 13:30

Проблема состояла действительно в том, что был предел задачи нового systemd, в который входят, в Ubuntu 16.04 и что

UserTasksMax=infinity

не принимался в/etc/systemd/logind.conf как пользователь Matti K предложенный. Я изменил это на

UserTasksMax=51200

для соответствия ulimit количеству открытых файлов (предел, который мы изменили в Ubuntu 14.04, чтобы позволить этой установке работать), и все хорошо работает теперь.

0
ответ дан 28 September 2019 в 13:30

Другие вопросы по тегам:

Похожие вопросы: