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

Alexey Bestciokov proforg at maloletka.ru
Tue Jan 25 22:05:01 MSK 2005


очень странно всё это
у меня работает устойчиво и быстро
правда на tcp - как на локальной машине, так (в данный момент) и на
удалённой.
ни при тестах ab (concurency=100), ни при реальной работе (порядка
600К запросов в сутк) при нормально работающем fcgi сервере проблем не было
(кроме того что он пару раз вообще отваливался, но похоже это были
проблемы сервера fcgi :)

вообще по поводу tcp и сокетов из доков Zeus:
http://support.zeus.com/products/v4/php.html#methods
Although easy to setup, it relies on Unix Domain Sockets which are
known to have problems sustaining high connection rates on some
platforms such as Solaris and HPUX. For this reason we recommened the
use of Remote Responders which use the superior TCP sockets.

AV> 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);
>> } -----------

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

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

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



Алексей Бещёков.
proforg at maloletka.ru






More information about the nginx-ru mailing list