Ubuntu
如何使用 systemd 設置 unix socket backlog?
我遇到了 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
提高到所需的積壓長度。