Небольшое предисловие. Существует масса различных веб-серверов с различным функционалом и с одними и теми же (основными) функциями они справляются по-разному. В данном тесте я смотрел насколько эти сервера справляются с раздачей статического контента. Оговорюсь сразу, что более-менее нормально справлялся с нагрузкой только апач, на остальных тест периодически подвисал.
Итак, вот что нам показывал синтетический тест ab из состава Apache на apache-2.2.3-22.el5-3.2, nginx-0.7.61, Lighttpd-1.4.23:
С keepalive
<table width="100%">
<tbody>
<tr>
<td colspan="3">ab -k -c 16 -n 40000 http://site/page.html</td>
</tr>
<tr>
<td>nginx</td>
<td>lighttpd</td>
<td>apache</td>
</tr>
<tr>
<td>1936</td>
<td>4612</td>
<td>2737</td>
</tr>
<tr>
<td>1896</td>
<td>4596</td>
<td>2773</td>
</tr>
<tr>
<td>1914</td>
<td>4571</td>
<td>2755</td>
</tr>
<tr>
<td>1924</td>
<td>4587</td>
<td>2767</td>
</tr>
<tr>
<td>1465</td>
<td>4563</td>
<td>2761</td>
</tr>
</tbody>
</table>
Без keepalive
<table width="100%">
<tbody>
<tr>
<td colspan="3">ab -c 16 -n 40000 http://site/page.html</td>
</tr>
<tr>
<td>nginx</td>
<td>lighttpd</td>
<td>apache</td>
</tr>
<tr>
<td>1920</td>
<td>1733</td>
<td>1646</td>
</tr>
<tr>
<td>1770</td>
<td>1722</td>
<td>1609</td>
</tr>
<tr>
<td>1892</td>
<td>1791</td>
<td>1579</td>
</tr>
<tr>
<td>1887</td>
<td>1733</td>
<td>1579</td>
</tr>
<tr>
<td>1766</td>
<td>1795</td>
<td>1584</td>
</tr>
</tbody>
</table>
Как можно заметить, по результатам тестов nginx почему-то забывает про keep-alive соединения (где-то я натыкался на разъяснение, что тэг keep-alive для nginx должен писаться маленькими буквами, а ab пишет его Keep-Alive), причём как в версии 0.6.36 из репозитория epel так и самосборный 0.7.61 , если бы не этот его недостаток он бы наверно обогнал немного по скорости обработки запросов lighttpd. Пару слов о загрузке процессора (определял на глазок по gkellm) если апач сжирает весь процессор, то nginx отъедает процентов 30 а lighttpd и того меньше - 23-25.
Иными словами несмотря на идиотский синаксис конфигурационного файла у lighttpd есть преимущество в эффективности потребления ресурсов и он корректно работает с keep-alive запросами. Однако в коде Lighttpd переодически обнаруживаются более серьёзные изъяны в плане безопасности чем у того же nginx. Но эти изъяны с лихвой компенсируются возможностью запускать cgi-приложения и самостоятельным управлением fcgi процессами (что очень полезно для stand alone севера, без выделенной отдельно железки под fcgi)

Next Post