У нас есть распределенная поисковая система 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, например:
Я попробовал после этого сообщения и установки
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 мог ограничивать создание потока. Заранее спасибо за любую справку.
У нас была идентичная проблема, и первопричина, казалось, была, что logind.conf не поддерживает "бесконечность". Вместо этого необходимо использовать точный предел (такой как UserTasksMax=32000
).
Это, кажется, фиксируется в последней версии ( https://github.com/systemd/systemd/issues/3833), но по крайней мере наша Ubuntu 16.04 имела версию, которая не поддерживала infinity
.
Проблема состояла действительно в том, что был предел задачи нового systemd, в который входят, в Ubuntu 16.04 и что
UserTasksMax=infinity
не принимался в/etc/systemd/logind.conf как пользователь Matti K предложенный. Я изменил это на
UserTasksMax=51200
для соответствия ulimit количеству открытых файлов (предел, который мы изменили в Ubuntu 14.04, чтобы позволить этой установке работать), и все хорошо работает теперь.