Сервер Ubuntu 10.04.2
$ uname -a Linux my.local 2.6.32-30-generic-pae #59-Ubuntu SMP Tue Mar 1 23:01:33 UTC 2011 i686 GNU/Linux
Кажется, что очередь сокетов моего домена переполнена, но я не могу этого доказать.
У меня есть этот стек nginx->[spawn-fcgi->multiwatch->]custom-fcgi-service
Nginx общается с custom-fcgi-service
с помощью сокета домена unix.
Сегодня у нас небольшой рост трафика, и вдруг мой nginx error.log
полно угрей:
2011/04/07 15:31:51 [error] 28187#0: *469350 connect() to unix:/tmp/my.socket failed (11: Resource temporarily unavailable) while connecting to upstream, client: [IP witheld], server: my.local, request: "GET /myurl HTTP/1.0", upstream: "fastcgi://unix:/tmp/my.socket:", host: "example.com"
Некоторые запросы проходят, но многие возвращают ошибку 5xx.
Если я перезапущу custom-fcgi-service
, ошибка исчезнет, но вскоре появится снова. После осмотра custom-fcgi-service
status, я достаточно уверен, что он работает нормально (хотя может быть слишком медленным для такого объема трафика, но это всего лишь гипотеза).
Я пробовал это делать:
echo 65535 > /proc/sys/net/unix/max_dgram_qlen
Но это не сильно помогло. (Не уверен, увеличилось ли время до ошибки, может быть, но этого недостаточно, чтобы исправить это.)
Если я увеличу количество рабочих вил custom-fcgi-service
, ошибка не появляется в течение длительного времени, но до сих пор мне не удавалось увеличить количество рабочих, достаточно высоко, чтобы исправить ее навсегда. Нагрузка на ЦП, память и ввод-вывод на этой машине находится в установленных пределах, поэтому, опять же, я думаю, что custom-fcgi-service
просто замедляется при последующем сетевом вызове.
Вопрос: как отладить эту проблему? И если это действительно длина очереди сокетов, как сделать датчик, который предупредит нас, что нам нужно разветвлять больше? custom-fcgi-service
рабочие?
Похоже, у вас проблема с подключением, а не с отправкой. Попытайтесь увеличить отставание приемника ядра:
echo "2000" > /proc/sys/net/core/netdev_max_backlog
или
sysctl –w sys.net.core.netdev_max_backlog=2000
Вы проверяли системные журналы (например, dmesg)?
попробуйте изменить файл конфигурации спауна, невыполнение: 4096.