Ошибки при использовании fastcgi

Andrew Velikoredchanin andrew at rodtext.ru
Tue Jan 25 19:06:45 MSK 2005


Igor Sysoev пишет:
> 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);
> } -----------

Выдает:
s: ""
e: "Transport endpoint is not connected"

> Что касается собственно ошибки, то, судя по всему, это происходит, когда
> переполняется listen очередь у сокета. FreeBSD в таких случаях для
> connect() возвращает ECONNREFUSED, а Линукс - EINPROGRESS, а затем
> возвращает в epoll готовность на запись EPOLLOUT и ошибку EPOLLHUP.
> Последущий writev() уже возвращает ENOTCONN.
> 
> Лечить можно так:
...
> 3) перейти на tcp, оно, возможно, более устойчиво.

По тестам tcp работает существенно медленнее.





More information about the nginx-ru mailing list