Как увеличить количество доступных сокетов с помощью Mina в Ubuntu?

Как увеличить количество сокетов, которые можно открыть в Ubuntu при использовании Mina 2.0.8? Как только мой сервер достигает примерно 1700 подключений, я получаю это в своих журналах:

2013-01-24 04:21:49,465 [NioSocketAcceptor-1] WARN  o.a.m.util.DefaultExceptionMonitor - Unexpected exception.
java.io.IOException: Too many open files
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) ~[na:1.6.0_20]
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:163) ~[na:1.6.0_20]
    at org.apache.mina.transport.socket.nio.NioSocketAcceptor.accept(NioSocketAcceptor.java:159) ~[mina-core-2.0.8-SNAPSHOT.jar:na]
    at org.apache.mina.transport.socket.nio.NioSocketAcceptor.accept(NioSocketAcceptor.java:50) ~[mina-core-2.0.8-SNAPSHOT.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.processHandles(AbstractPollingIoAcceptor.java:506) ~[mina-core-2.0.8-SNAPSHOT.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.run(AbstractPollingIoAcceptor.java:447) ~[mina-core-2.0.8-SNAPSHOT.jar:na]
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) [mina-core-2.0.8-SNAPSHOT.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.6.0_20]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.6.0_20]
    at java.lang.Thread.run(Thread.java:636) [na:1.6.0_20]

Как это возможно, если для моих файловых дескрипторов установлено максимальное значение 331278 для жесткого и мягкого? Запуск отчетов "ulimit -n"

331287

и запуск отчетов "sysctl fs.file-nr"

fs.file-nr = 1728   0   331287

Содержимое файла /etc/security/limits.conf

* hard nofile 331287
* soft nofile 331287

person Paul Gregoire    schedule 24.01.2013    source источник
comment
Вы уверены, что ограничения установлены правильно для пользователя, запускающего веб-приложение? ulimits устанавливаются для каждого пользователя отдельно.   -  person user439407    schedule 24.01.2013
comment
Вы пытались установить ограничения в limits.conf? Возможно, то, что вы видите с ulimit -n, действительно только для текущего пользователя оболочки, но не для пользователя, запускающего демон Mina.   -  person Davide Berra    schedule 24.01.2013
comment
Я добавил содержимое лимитов выше; демон запускается через init.d с помощью sudo   -  person Paul Gregoire    schedule 24.01.2013


Ответы (1)


Две вещи, похоже, исправили проблему, с которой я столкнулся выше:

  1. Увеличение файловых дескрипторов для пользователя «root», поскольку он не включен при использовании «*» в limit.conf.

  2. Редактирование моего сценария init.d, чтобы включить принудительную установку ulimit для создаваемого процесса. По-видимому, в Ubuntu существует известная проблема, связанная с дескрипторами файлов демона процесса. Эта ссылка содержит подробности: http://www.jayway.com/2012/02/11/how-to-really-fix-the-too-many-open-files-problem-for-tomcat-in-ubuntu/

person Paul Gregoire    schedule 24.01.2013