如何使用 systemd 设置 unix 套接字积压?

如何使用 systemd 设置 unix 套接字积压?

我在使用 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

答案1

listen(2)

如果 backlog 参数大于 /proc/sys/net/core/somaxconn 中的值,则会将其默默截断为该值;此文件中的默认值为 128。在 2.4.25 之前的内核中,此限制是一个硬编码值 SOMAXCONN,其值为 128。

因此,您需要将值提升/proc/sys/net/core/somaxconn至所需的积压长度。

答案2

Backlog 参数是正确的。问题是,.socket 文件未通过 systemctl enable x.socket 启用,因此 systemd 仅启动守护进程,守护进程本身正在创建套接字,显然没有考虑 .socket 文件中的 backlog 参数。

相关内容