ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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




 




Copyright © Lexa Software, 1996-2009.