In <9903.991215@forum.5ci.net> Vadim (vadim@forum.5ci.net) wrote:
V> Всем добрый день (утро, ночь).
V> Собственно в процессе работы возникла пара вопросов...
V> делается локальная баннерная вертушка. На C++ написан cgi который
V> обращается за очередным баннером.
Расстрелять грамотея, который такую #%$$& сотворил.
V> 1. При тестировании быстродействия (цикл запросов) из консоли получаю
V> где-то 100-120 вызовов за секунду. При вызове уже из апачей идет всего
V> порядка 50 за секунду. В принципе этого хватает, но хочется знать
V> почему так резко падает быстродействие. Более 8 копий апача не
V> плодится, хотя разрешено 128.
Hint: при каждом вызове CGI нужно сделать fork и породить exec'ом еще один
процесс. Не знаю, где как, а в Linux'е это стоит весьма и весьма дорого за
счет разной GlibC'шной магии (fork дешев, а вот exec...)...
V> 2. Как лучше (быстрее для сервера) отдавать картинку ? В принципе
V> возможно давать клиенту из cgi редирект на картинку (location) или же
V> давать картинку напрямую из скрипта ... Хочется выбрать вариант менее
V> всего нагружающий сервер.
Вставить оный код на C++ (если вы уже дошли до того, чтобы это на C++ писать)
в модуль и зашить внутрь апача. Это если вы хотите беречь сервер :-) С
точки зрения экономии bandwidth'а лучше выдавать картинку самой .CGI'шкой
(а дополнительную нагрузку от этого за overhead'ом от fork/exec'а вы просто
не увидите).
V> Использую RedHat 6.1 / IP 450Mhz III / 256Ram / SCSI диски.
Ага. Таки Linux и GlibC 2.1 ... Тогда от CGI нужно избавляться всеми
возможными способами. Старт нового процесса в Linux'е стоит ОЧЕНЬ дорого
(по сравнению с FreeBSD, а не с NT, конечно -- сделать этот процесс
медленнее, чем в NT, наверное, просто нельзя :-) ...
P.S. Можете попробовать FastCGI для начала.
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =