Здравствуйте.
У меня не работает upstream keepalive в связке с fastcgi-c бэкэндом.
libfcgi - 2.4
nginx - 1.4.1, 1.5.8
Ubuntu 13.10 x64
Конфиг ngnix`а сделан по документации:
upstream test {
server 127.0.0.1:12000;
keepalive 32;
}
location / {
access_log off;
error_log /var/log/nginx/error.log;
allow all;
fastcgi_keep_conn on;
fastcgi_pass test;
include fastcgi_params;
}
Тестирую просто:
ab -T application/octet-stream -k -n 10000 -c 1 "http://test.local/"
Если закомментировать "keepalive 32" то все работает отлично. Но на каждый запрос создается новое соединение. Это отлично видно по netstat -an | grep 12000
Если же оставить так как выше, то через 5-10 тысяч запросов ab подвисает и отваливается по таймауту. И больше ни одного запроса к бэкэкнду не доходит, до рестарта бэкэнда или nginx.
Бэкэнд прост как лапоть (написан с помощью libfcgi):
#include "fcgi_stdio.h"
#include <stdlib.h>
int count;
int main()
{
count=0;
while (FCGI_Accept() >= 0) {
printf("Content-type: application/octet-stream\nContent-length: %u\n\n", 0);
}
return 0;
}
Вроде тут виснуть нечему. Но виснет.
Подскажите, может стакливались с таким? Как чинить. И как продиагностировать, в чем именно проблема?