Ошибки при использовании fastcgi
Igor Sysoev
is at rambler-co.ru
Tue Jan 25 18:30:28 MSK 2005
On Tue, 25 Jan 2005, Andrew Velikoredchanin wrote:
> Сделал один скриптик на перле. Выводит просто обычную строку. Запустил на
> fastcgi сервере в один поток.
>
> Настройки в nginx:
>
> location /fastcgi/test1.pl {
> fastcgi_pass unix:/tmp/test1.sock;
> fastcgi_root /usr/local/nginx/html/fastcgi/test1.pl;
> }
>
> Запускаю вот такой тест:
>
> ./ab -n 1000 -c 100 http://localhost/fastcgi/test1.pl
>
> Сам тест выдает в статистике:
>
> Failed requests: 439
> (Connect: 0, Length: 439, Exceptions: 0)
>
> В логах nginx при этом:
>
> 2005/01/25 17:51:59 [error] 19502#0: *21336 writev() failed (107: ) while
> sending request to upstream, client: 127.0.0.1, URL: /fastcgi/test1.pl,
> upstream: fastcgi://unix:/tmp/test1.sock:/
> 2005/01/25 17:51:59 [error] 19502#0: *21337 writev() failed (107: ) while
> sending request to upstream, client: 127.0.0.1, URL: /fastcgi/test1.pl,
> upstream: fastcgi://unix:/tmp/test1.sock:/
> 2005/01/25 17:51:59 [error] 19502#0: *21338 writev() failed (107: ) while
> sending request to upstream, client: 127.0.0.1, URL: /fastcgi/test1.pl,
> upstream: fastcgi://unix:/tmp/test1.sock:/
> 2005/01/25 17:51:59 [error] 19502#0: *21339 writev() failed (107: ) while
> sending request to upstream, client: 127.0.0.1, URL: /fastcgi/test1.pl,
> upstream: fastcgi://unix:/tmp/test1.sock:/
>
> Что это значит?
В Линуксе 107 означает ENOTCONN, текст при этом такой:
"Transport endpoint is not connected". Для того, чтобы узнать
почему не выводиться текст, предлагается собрать и запустить вот
такую программку:
-----------
#include <string.h>
int main()
{
char s[1024], *e;
s[0] = '\0';
e = strerror_r(107, s, 1024);
printf("s: \"%s\"\n", s);
printf("e: \"%s\"\n", e);
}
-----------
Что касается собственно ошибки, то, судя по всему, это происходит, когда
переполняется listen очередь у сокета. FreeBSD в таких случаях для
connect() возвращает ECONNREFUSED, а Линукс - EINPROGRESS, а затем
возвращает в epoll готовность на запись EPOLLOUT и ошибку EPOLLHUP.
Последущий writev() уже возвращает ENOTCONN.
Лечить можно так:
1) увеличить размеры очереди, как для Линукса - точно не скажу;
2) увеличить число процессов у fastcgi;
3) перейти на tcp, оно, возможно, более устойчиво.
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list