一直莫名其妙的遇到类似这样错误:connect() to unix:/tmp/php-fcgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream,N久之后才发现了Igor Sysoev的留言。

原文链接:http://marc.info/?l=nginx&m=125423942216521&w=2

> I found that :
>
> #define NGX_LISTEN_BACKLOG 511
>
> and use it as the backlog of listen()
>
> ls.backlog = NGX_LISTEN_BACKLOG;
> if (listen(s, ls.backlog) == -1) {
>
> Does it mean that only 511 connection could be accept at the same time ?

No, it means that up to 511 connections can be queued in kernel listen
queue. 511 is just a safe limit for the most OSes. For FreeBSD it’s -1,
i.e., value of sysctl kern.ipc.somaxconn.

> May I modify it to 1024 or higher( I am sure use it less than SOMAXCONN )

listen 80 default backlog=1024;


Igor Sysoev

知识点:

kern.ipc.somaxconn
这个选项控制了 TCP 联机等候区最多可以等待的联机数量,其默认值为 128,不过这个值对于一台忙碌的服务器而言可能小了点。例如大型的网页服务器、邮件服务器,我们可以将它设为 1024。要注意的是在一些网络服务的程序中,如 Apache 及 sendmail 也有自己的等待数量设定,我们可能也要在那些软件上做一些设定才会让 kern.ipc.somaxconn 发生作用。将这个选项的值调大一点还有一个好处,就是在面对 Denial of service 的攻击时,有较好的防卫能力。