Эта ссылка довольно хорошо описывает, как эта ошибка генерируется JVM:
http://javaeesupportpatterns.blogspot.ro/2012/09/outofmemoryerror-unable-to-create-new.html
В основном это очень зависит от ОС. В RedHat Linux 6.5 (скорее всего, в других дистрибутивах / версиях и версиях ядра) max_threads = max_process x 2.
Максимальное количество потоков очень зависит от количества разрешенных процессов. Максимальное количество процессов зависит от установленной вами максимальной физической памяти.
Если вы заглядываете в файл limit.conf (на моем RHL 6.5 он находится в /etc/security/limits.d/90-nproc.conf). Подайте заявку в файл:
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc **1024**
root soft nproc unlimited
Вы увидите, что для пользователей без полномочий root это 1024 (что означает максимум 2048 потоков).
Чтобы увидеть максимальное количество потоков, которое может создать ваш пользователь, запустите эту команду "cat / proc / sys / kernel / threads-max" или "sysctl kernel.threads-max".
Чтобы решить такую проблему (по крайней мере, это сработало для меня) от имени пользователя root, вам нужно увеличить максимально допустимое количество потоков:
echo 10000> / proc / sys / kernel / threads-max
Это влияет на всех пользователей и рут. Пользователь должен выйти из системы, а затем снова войти, чтобы настройки вступили в силу.