fastcgi performance at 10K

Sergey Shepelev temotor at gmail.com
Sat Apr 18 14:43:24 MSD 2009


Может лучше писать HTTP бекенды вместо FastCGI?

2009/4/17 Denis F. Latypoff <denis at gostats.ru>:
> Hello Maxim,
>
> Saturday, April 18, 2009, 12:38:42 AM, you wrote:
>
>> Hello!
>
>> On Fri, Apr 17, 2009 at 11:48:08PM +0700, Denis F. Latypoff wrote:
>
>>> Hello Maxim,
>>>
>>> Thursday, April 16, 2009, 1:23:11 AM, you wrote:
>>>
>>> > Hello!
>>>
>>> > On Wed, Apr 15, 2009 at 01:09:30PM +0100, Valery Kholodkov wrote:
>>>
>>> >>
>>> >> ----- "Maxim Dounin" <mdounin at mdounin.ru> wrote:
>>> >>
>>> >> > У меня есть работающий прототип поддержки keepalive для fastcgi.
>>> >> > Если очень хочется потестировать - могу поделиться патчами.
>>> >> >
>>> >> > Но надо понимать что на сколько-нибудь тяжёлых fastcgi запросах
>>> >> > это не приведёт к заметному ускорению, и описанные проблемы скорее
>>> >> > всего не вылечит (а может быть и усугубит).
>>> >>
>>> >> Вне зависимости от того, кто что про это думает, код в студию!
>>>
>>> > Патчи прилагаются, накладывать по очереди:
>>>
>>> > patch-nginx-proxy-flush-2.txt
>>> > patch-nginx-proxy-length-2.txt
>>> > patch-nginx-keepalive.txt
>>>
>>> > Всё должно нормально накладываться на 0.7.51.  Первые два патча
>>> > уже публиковались ранее, и вообще сами по себе полезные.  Третий
>>> > грязненький, но я честно предупреждал что это лишь прототип.  :)
>>>
>>> > Использовать вместе со свежей версией ngx_http_upstream_keepalive,
>>> > берут тут:
>>>
>>> > http://mdounin.ru/hg/ngx_http_upstream_keepalive/
>>>
>>> > При этом при сборке nginx'а надо определить
>>> > NGX_UPSTREAM_KEEPALIVE_PATCHED, иначе работать будет как раньше
>>> > (т.е. применимо только для memcached'а).  Как-то так:
>>>
>>> > ./configure --with-cc-opt="-D NGX_UPSTREAM_KEEPALIVE_PATCHED" \
>>> >     --add-module=/path/to/ngx_http_upstream_keepalive
>>>
>>> > Maxim Dounin
>>>
>>> это моё (время в GMT):
>>>
>>> [16:37:27] [debug] app_server.c:278:server_accept(): [21] accepted from 192.168.61.30
>>> [16:37:27] [debug] socket.c:83:socket_non_block(): [21] set NONBLOCK
>>> [16:37:27] [debug] app_server.c:77:app_server_read(): [21] read 1344 bytes
>>> [16:37:27] [debug] app_server.c:99:app_server_read(): [21] recv(): Resource temporarily unavailable
>>> [16:37:27] [debug] fastcgi.c:617:fastcgi_request(): FASTCGI_VERSION: 1
>>> [16:37:27] [debug] fastcgi.c:637:fastcgi_request(): FASTCGI_TYPE: FASTCGI_BEGIN_REQUEST
>>> [16:37:27] [debug] fastcgi.c:664:fastcgi_request(): FASTCGI_REQUEST_ID_HI: 0
>>> [16:37:27] [debug] fastcgi.c:673:fastcgi_request(): FASTCGI_REQUEST_ID_LO: 1
>>> [16:37:27] [debug] fastcgi.c:692:fastcgi_request(): FASTCGI_CONTENT_LENGTH_HI: 0
>>> [16:37:27] [debug] fastcgi.c:701:fastcgi_request(): FASTCGI_CONTENT_LENGTH_LO: 8
>>> [16:37:27] [debug] fastcgi.c:710:fastcgi_request(): FASTCGI_PADDING_LENGTH: 0
>>> [16:37:27] [debug] fastcgi.c:719:fastcgi_request(): FASTCGI_RESERVED: 0
>>> [16:37:27] [debug] fastcgi.c:761:fastcgi_request(): FASTCGI_DATA: 8 bytes left
>>> [16:37:27] [debug] fastcgi.c:151:fastcgi_process_begin_request(): FASTCGI_ROLE_HI: 0
>>> [16:37:27] [debug] fastcgi.c:160:fastcgi_process_begin_request(): FASTCGI_ROLE_LO: 1
>>> [16:37:27] [debug] fastcgi.c:184:fastcgi_process_begin_request(): FASTCGI_FLAGS: 1
>>>
>>> то бишь - FCGI_KEEP_CONN
>>>
>>> это nginx:
>>>
>>> 2009/04/17 23:37:27 [debug] 28959#0: *54 http writer done: "/game.json?"
>>> 2009/04/17 23:37:27 [debug] 28959#0: *54 http finalize request: 0, "/game.json?"
>>> 2009/04/17 23:37:27 [debug] 28959#0: *54 event timer del: 5: 3035726014
>>> 2009/04/17 23:37:27 [debug] 28959#0: *54 set http keepalive handler
>>> 2009/04/17 23:37:27 [debug] 28959#0: *54 http close request
>>>
>>> ну и в моем самопальном сервере:
>>>
>>> [16:37:27] [debug] server.c:182:server_write(): [21] written 16232
>>> bytes of 16232
>>>
>>> дальше добавляю fd:21 в событие READ, якобы для следующего запроса и
>>> получаю:
>>>
>>> [16:37:27] [notice] server.c:84:server_read(): [21] recv(): client
>>> prematurely closed connection
>>> [16:37:27] [debug] socket.c:72:socket_close(): [21] closed
>
>> Just for record:
>
>> Соединение закрыто nginx'ом, ибо не активирован upstream keepalive. Не
>> забываем прописывать
>
>>     upstream {
>>        server ...
>>        keepalive <сколько надо>;
>>     }
>
>> В README к ngx_http_upstream_keepalive всё написано с
>> подробностями.
>
>> Ну и вообще говоря закрытое сервером соединение - это нормально,
>> FCGI_KEEP_CONN как раз и говорит приложению что сервер это сделает
>> сам когда надо будет.
>
> ага, учтем.
>
> в общем померялся,
>
> Ядро: 2.6.28.4
> ДДОС: ab -k -c 10000 -n 500000 -p ./post.js (у мну отдавалка JSON)
>
> 1) Requests per second:    1726.60 [#/sec] (mean)
> 2) Requests per second:    948.40 [#/sec] (mean)
>
> использовались три машины (досилка, nginx, и fastcgi)
>
> Предлагаю серьезно подумать над поддержкой keepalive для fastcgi.
>
>> Maxim Dounin
>
> --
> Best regards,
>  Denis                            mailto:denis at gostats.ru
>
>
>


More information about the nginx-ru mailing list