Ubuntu

如何使用 systemd 設置 unix socket backlog?

  • June 25, 2017

我遇到了 nginx 和 fastcgi 後端的問題。我試圖增加積壓的大小,但它似乎不起作用。我究竟做錯了什麼?後端通過 systemd 啟動。

作業系統:16.04.2 LTS(Xenial Xerus)

# /etc/systemd/system/backend.socket 
[Socket]
Backlog=1000
ListenStream=/tmp/backend.socket

# ss -l|grep back
u_str  LISTEN     0      128    /tmp/backend.socket 21641                 * 0             

# nginx log
2017/06/21 09:40:56 [error] 1565#1565: *33729 connect() to unix:/tmp/backend.socket failed (11: Resource temporarily unavailable) while connecting to upstream, upstream: "fastcgi://unix:/tmp/backend.socket:"

$ cat /proc/sys/net/core/somaxconn
1024

Backlog 參數是正確的。問題是,.socket 文件沒有通過 systemctl enable x.socket 啟用,所以 systemd 只是啟動守護程序,而守護程序本身正在創建套接字,顯然沒有考慮 .socket 文件中的積壓參數。

來自listen(2)

如果 backlog 參數大於 /proc/sys/net/core/somaxconn 中的值,那麼它會被靜默截斷為該值;此文件中的預設值為 128。在 2.4.25 之前的核心中,此限制是硬編碼值 SOMAXCONN,值為 128。

因此,您需要將該值/proc/sys/net/core/somaxconn提高到所需的積壓長度。

引用自:https://serverfault.com/questions/857010