如何在Ubuntu上使用Mina增加可用套接字?

在使用Mina 2.0.8时,如何增加可能在ubuntu上打开的套接字数量? 一旦我的服务器达到约1700个连接,我在我的日志中得到这个:

 2013-01-24 04:21:49,465 [NioSocketAcceptor-1] WARN oamutil.DefaultExceptionMonitor  - 意外的exception。
 java.io.IOException:打开的文件过多
    在sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)〜[na:1.6.0_20]
    在sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:163)〜[na:1.6.0_20]
    在org.apache.mina.transport.socket.nio.NioSocketAcceptor.accept(NioSocketAcceptor.java:159)〜[mina-core-2.0.8-SNAPSHOT.jar:na]
    在org.apache.mina.transport.socket.nio.NioSocketAcceptor.accept(NioSocketAcceptor.java:50)〜[mina-core-2.0.8-SNAPSHOT.jar:na]
    在org.apache.mina.core.polling.AbstractPollingIoAcceptor $ Acceptor.processHandles(AbstractPollingIoAcceptor.java:506)〜[mina-core-2.0.8-SNAPSHOT.jar:na]
    在org.apache.mina.core.polling.AbstractPollingIoAcceptor $ Acceptor.run(AbstractPollingIoAcceptor.java:447)〜[mina-core-2.0.8-SNAPSHOT.jar:na]
    在org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)[mina-core-2.0.8-SNAPSHOT.jar:na]
    在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)[na:1.6.0_20]
    在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)[na:1.6.0_20]
    在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文件的内容

 *努力nofile 331287
 *软nofile 331287

有两件事似乎已经解决了我上面的问题:

  1. 增加“root”用户的文件句柄,因为在limits.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/