Сегодня расскажу, как делал нагрузочное тестирование nginx, Apache и OpenLiteSpeed (он же OLS) и какой из серверов быстрее.
Поводом для теста стало добавление OLS в ISPmanager. Поддержка Apache и nginx у нас была давно, а вот OLS — в новинку. Добавить его в ISPmanager очень просили наши пользователи. Разработчики говорят, что OLS супербыстрый сервер, да и независимые замеры подтверждают. Но мы решили проверить всё сами. Оказалось, сервер действительно производительный, но всё же не всегда обгоняет конкурентов.
Методика тестирования. Готовим танк
Цель тестирования — замерить и сравнить эти показатели:
- скорость — время ответа;
- производительность — максимальное количество запросов, которые веб-сервер может обработать за единицу времени на одних и тех же ресурсах.
Всего будем проверять четыре конфигурации:
- Apache MPM Prefork + mod_php
- Nginx + Apache MPM Prefork + mod_php
- Nginx + PHP FPM
- OpenLiteSpeed + LSAPI
Все веб-серверы возьмём с дефолтными настройками, без допинга.
Для тестирования используем VDS со следующими характеристиками:
- CPU — 3,4 GHz (4 ядра)
- RAM — 4 GB
- HDD — 16 GB
Тестировать будем сайт со свежеустановленной WordPress — пожалуй, самый популярный вариант CMS. Для этого используем утилиту Яндекс.Танк. Запросы будут осуществляться к статическому и динамическому контенту. В течение трёх минут будем постепенно увеличивать количество запросов в секунду от 0 до 600.
Получилась следующая конфигурация танка:
overload: enabled: true package: yandextank.plugins.DataUploader token_file: "token.txt" phantom: instances: 100000 address: 172.31.97.2:80 load_profile: load_type: rps schedule: line(0, 600, 3m) headers: - "[Host: example.com]" uris: - "/" - "/?p=1" - "/wp-login.php" - "/wp-content/themes/twentyseventeen/assets/images/header.jpg" - "/wp-content/themes/twentyseventeen/style.css" - "/wp-content/themes/twentyseventeen/assets/js/global.js?ver=20190121" console: enabled: true telegraf: enabled: false
Результаты тестирования
Apache MPM Prefork + mod_php, cреднее количество обработанных запросов в секунду:

Apache MPM Prefork + mod_php, cреднее время ответа, мс Apache MPM Prefork + mod_php:

Видно, что Apache способен обработать приблизительно 186 запросов в секунду на предоставленных ресурсах сервера. Затем он упирается в процессор и начинает возвращать ошибку 500. Среднее время ответа до этого момента составляет 23 мс.
Nginx + Apache MPM Prefork + mod_php, среднее количество обработанных запросов в секунду

Nginx + Apache MPM Prefork + mod_php, cреднее время ответа, мс

Если использовать для обработки статики Nginx c Apache, количество обрабатываемых запросов увеличивается до 242 в секунду. Среднее время ответа — 19 мс.
Nginx + PHP FPM, cреднее количество обработанных запросов в секунду:

Nginx + PHP FPM, cреднее время ответа, мс

PHP FPM даёт отличную производительность. Такая конфигурация способна обработать примерно 422 запроса в секунду, а время ответа будет всего лишь 10 мс. Посмотрим, обгонит ли её OpenLiteSpeed.
OpenLiteSpeed + LSAPI, cреднее количество обработанных запросов в секунду

OpenLiteSpeed + LSAPI, cреднее время ответа для OpenLiteSpeed, мс

OpenLiteSpeed способен обработать примерно 273 запроса в секунду со средним временем ответа 17 мс.
Сравниваем результаты
Чтобы увидеть общую картину, сравним результаты всех замеров:


В этом тесте OpenLiteSpeed быстрее, чем Apache и комбинация Nginx + Apache, но всё ещё значительно медленнее Nginx + PHP FPM.
Результаты немного разочаровывают: мы ожидали, что OLS обгонит всех конкурентов. Но при тестировании брали дефолтные конфигурации. В OpenLiteSpeed же есть множество инструментов, которые помогут потягаться с Nginx. Например, плагин кеширования LSCache, сжатие brotli, протокол HTTP/3 и т. п. Возможно, в будущем мы проведем подобное соревнование уже оптимизированных веб-серверов — тогда обязательно расскажем вам о результатах в нашем сообществе в Telegram.