Java не может создать новый процесс: слишком много ошибок открытого файла - PullRequest
0 голосов
/ 14 февраля 2012

Я запускаю слишком много процессов в Java, используя:

       Runtime.getRuntime().exec("java -ja myJar.jar")

Когда он достигает около 350 процессов, я получаю исключение ввода-вывода:

 Cannot run program "java": java.io.IOException: error=24, Too many open files
 Exception in creating process
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
    at java.lang.Runtime.exec(Runtime.java:610)
    at java.lang.Runtime.exec(Runtime.java:448)
    at java.lang.Runtime.exec(Runtime.java:345)

В каждом процессе, который я используюодно соединение с базой данных.Я использую 32-битную ОС Ubuntu.Но когда я запускаю:

   ulimit -u 

, я вижу, что ограничение процесса не ограничено.В чем может быть проблема?

Ответы [ 3 ]

1 голос
/ 18 апреля 2012

Проблема в том, что у вас слишком много открытых файлов, а не слишком много процессов в работе. Чтобы проверить ограничение файла, выполните:

ulimit -n

Обычно это будет 1024.

Проверьте http://www.puschitz.com/TuningLinuxForOracle.shtml и найдите ulimit для получения хороших инструкций по изменению этого лимита.

1 голос
/ 14 февраля 2012

Все системы имеют свои ограничения - похоже, вы достигли предела вашей системы.

В linux для создания новых процессов требуется много inode (например, дескрипторы windows ), что очень похоже на дескриптор файла. Единственный способ обойти это - выделить больше с помощью настроек ядра (я не знаю, как это не так).

Рассматривали ли вы вместо этого начальные лоты Threads? Они будут потреблять намного меньше системных ресурсов.

0 голосов
/ 14 февраля 2012

Запуск 350 экземпляров JVM - это не обычный способ. Можете ли вы перепроектировать и запустить 350 «основных потоков» в рамках одной JVM. Так работает контейнер сервлетов. Все веб-приложения работают в одной и той же JVM.

PD. Страница руководства ulimit говорит, чтобы увидеть макс. открытые файлы - ulimit -n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...