В следующем примере я использую Play framework 2.4.0 со Scala 2.11.7.Play framework scala - слишком много открытых файлов - как на производстве
я подчеркиваю простое приложение игры с Гатлинга, инъекционные 5000 пользователей более 60 секунд, и через несколько секунд, сервер воспроизведения возвращает следующее:
«Не удалось принять соединение.» и "java.io.IOException: Слишком много открытых файлов в системе".
Вот ассоциированная StackTrace:
22:52:48.943 [application-akka.actor.default-dispatcher-12] INFO play.api.Play$ - Application started (Dev)
22:53:08.939 [New I/O server boss #17] WARN o.j.n.c.s.nio.AbstractNioSelector - Failed to accept a connection.
java.io.IOException: Too many open files in system
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) ~[na:1.8.0_45]
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) ~[na:1.8.0_45]
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) ~[na:1.8.0_45]
at org.jboss.netty.channel.socket.nio.NioServerBoss.process(NioServerBoss.java:100) [netty-3.10.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) [netty-3.10.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.java:42) [netty-3.10.3.Final.jar:na]
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.10.3.Final.jar:na]
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) [netty-3.10.3.Final.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
Я предполагаю, что это связано с ulimit
системы (? Возможно ли было бы подтвердить, что), и если да, мой вопрос заключается в следующем:
Как эта ошибка управляется в производственной среде? Это, установив высокое значение с ulimit -n <high_value>
?
Возможный дубликат [Java Too Many Open Files] (http://stackoverflow.com/questions/4289447/java-too-many-open-files) – childofsoong
Эта ошибка устраняется путем увеличения ограничений на количество открытых файлы для определенных пользователей или по всему миру. Это вопрос на уровне ОС, и ответ зависит от вашего типа и версии ОС. Предложите определить это, а затем выполнить поиск определенной процедуры для вашей платформы. Для CentOS/Fedora достойная процедура находится по адресу http://pro.benjaminste.in/post/318453669/increase-the-number-of-file-descriptors-on-centos. –
Благодарим вас за ответы. Является ли увеличение предела единственным/лучшим решением для производственных сред? Более того, как указано в моем другом комментарии, существуют ли какие-либо недостатки для файловой системы, ОС или других запущенных приложений в отношении латентности, характеристик или чего-либо еще? Или это «ulimit -n с высоким значением» - это просто стандартное решение без недостатка? Что делать, если проблема сохраняется для приложения воспроизведения даже с самым высоким уровнем ulimit для ОС? Спасибо! – user3439701