当一个生产系统有大量的请求负载时,或者在对它进行负载测试时,我们会遇到"打开的文件太多"的问题,如下所示。
[2011-06-09 20:48:31,852] WARN - HttpCoreNIOListener System may be unstable: IOReactor encountered a checked exception : Too many open files
java.io.IOException: Too many open files
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:152)
at org.apache.http.impl.nio.reactor.DefaultListeningIOReactor.processEvent(DefaultListeningIOReactor.java:129)
at org.apache.http.impl.nio.reactor.DefaultListeningIOReactor.processEvents(DefaultListeningIOReactor.java:113)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:315)
at org.apache.synapse.transport.nhttp.HttpCoreNIOListener$2.run(HttpCoreNIOListener.java:253)
at java.lang.Thread.run(Thread.java:662)
这个异常出现在负载均衡器中,如果允许打开的最大文件(ulimit)设置为低。我们可以通过提供更高的值(这里给出655350)来增加ulimit来修复上述异常。Ulimit -n 655350
然而,将ulimit -n设置为更高的数字可能会影响负载平衡器的整体性能,从而以前所未有的方式影响我们网站的响应时间。设置number -n到更高的值有什么已知的副作用吗?
副作用将是-在正常情况下,您希望限制进程打开的文件句柄的数量,这样它就不会耗尽可用的文件描述符或由于编程错误或DoS攻击而做其他不好的事情。如果你觉得你的系统不会这样做(或者显然不能在正常范围内工作!),那么就没有其他副作用了。