Назад | Перейти на главную страницу

Как установить отставание сокета unix с помощью systemd?

У меня проблема с nginx и backend 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

Из listen(2):

Если аргумент backlog больше, чем значение в / proc / sys / net / core / somaxconn, то он автоматически усекается до этого значения; значение по умолчанию в этом файле - 128. В ядрах до 2.4.25 этим пределом было жестко заданное значение SOMAXCONN со значением 128.

Итак, вам нужно увеличить значение в /proc/sys/net/core/somaxconn до желаемой длины отставания.

Параметр Backlog был правильным. Проблема заключалась в том, что файл .socket не был включен через systemctl enable x.socket, поэтому systemd только запускал демон, а сам демон создавал сокет, очевидно, не принимая во внимание параметр backlog в файле .socket.