如何避免负载均衡器中的"Too many open files"问题,将ulimit -n设置为更高的值有什么副作用?



当一个生产系统有大量的请求负载时,或者在对它进行负载测试时,我们会遇到"打开的文件太多"的问题,如下所示。

[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攻击而做其他不好的事情。如果你觉得你的系统不会这样做(或者显然不能在正常范围内工作!),那么就没有其他副作用了。

最新更新