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

时间:2013-01-24 04:48:30

标签: java linux sockets ubuntu mina

如何在使用Mina 2.0.8时增加可能在ubuntu上打开的套接字数量?一旦我的服务器达到约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

1 个答案:

答案 0 :(得分:2)

似乎已经解决了我上面遇到的问题:

  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/