Нагрузочное тестирование Apache и Tomcat на VPS: узкие места и результаты


Дата публикации:

Обновлено:


Статьи > Нагрузочное тестирование Apache и Tomcat на VPS: узкие места и результаты

Статус 2026 года и безопасное использование

Вывод: В стеке Apache-Tomcat первым ограничением может быть клиент, рабочие прокси-серверы, потоки коннектора, куча JVM или сборка мусора, код приложения, база данных или сам VPS. Один номер параллелизма не может определить емкость без учета задержки, ошибок и ресурсов.

Чему вы научитесь

  • Что измерялось в ходе первоначального эксперимента с двухуровневым VPS.
  • Как ограничения прокси-сервера и соединителя Tomcat влияют на время ответа приложения.
  • Что следует записывать в современном тесте: процентили, пропускная способность, сбои, ЦП, память, сборщик мусора, потоки и насыщенность нисходящего потока.

Для кого: Веб-команды Java учатся разрабатывать небольшие, основанные на фактических данных тесты производительности.

Актуальность на 2026 год года: Приведенные ниже результаты относятся к оригинальному тесту автора и не воспроизводятся для данного редакционного обновления. Относитесь к ним как к тематическому исследованию, а не как к подтвержденной текущей эффективности или рекомендации по покупке VPS.

Примечание по безопасности. Команды и примеры конфигурации из исходной статьи не проверялись повторно в современной производственной среде. Перед применением проверьте поддерживаемые версии, резервные копии, контроль доступа и процедуру отката в отдельной тестовой среде.

Официальные первоисточники

Обзор

Я измерил максимальное количество случаев, которые WEB/AP серверы (Apache и Tomcat) могут обрабатывать одновременно, и хотел бы написать о результатах. Нам было интересно узнать, какое максимальное количество запросов может быть обслужено, поэтому мы провели опрос. Используйте это как справочник для выбора технических характеристик VPS-сервера.

В этот раз измерения проводились на WEB/AP серверах (Apache и Tomcat), но, пожалуйста, обратитесь к статье ниже для измерений только на WEB (Apache).

Я измерил максимальное количество случаев, которые веб-сервер (Apache) может обрабатывать одновременно, используя арендованный сервер VPS.

Оглавление

  1. измерение
  2. Подробная информация о результатах измерений
  3. резюме

1. измерение

1-1. Измерительная среда

Ниже приведены условия, в которых будут проводиться измерения.

■Информация о сервере аренды

CPU2core
memory1GB
SSD50GB

■Информация о сервере

OSCentOS 7.4 64bit
Веб-серверApache HTTP Server 2.4.41
Сервер точки доступаApache Tomcat 9.0.27
Сервер БДPostgreSQL 10.2
JavaOpenJDK 11

1-2. Метод измерения

Я хотел бы измерить это с помощью JMeter. JMeter - это инструмент для измерения нагрузки, который работает на языке Java. Инструмент позволяет одновременно бросать большое количество запросов. Мы хотим постепенно увеличивать количество одновременных запросов с помощью JMeter и повышать нагрузку до тех пор, пока обработка не перестанет справляться.

К специфическим условиям относятся.

  • интервал запроса: 5 сек.
  • Количество одновременных запросов: 10 случаев. (Измерения постепенно увеличивались на 10 случаев в каждом.)
  • Время измерения: 60 секунд.

Время измерения - "60 секунд", а интервал запроса - "5 секунд", поэтому вы хотите получить доступ к системе 12 раз (60÷5).

1-3. результат измерения

В конце концов, многих интересует вывод о том, какие спецификации и сколько может выдержать сервер, поэтому я хотел бы сначала изложить вывод.

CPU: 2core
memory: 1GB
SSD: 50GB
Одновременно может быть обработано до 80 запросов

Результаты этого измерения показали вышесказанное. Из приведенных выше результатов можно сделать следующие выводы. Постарайтесь использовать это в качестве критерия при выборе технических характеристик сервера.

CPU: 1core
memory: 512MB
SSD: 25GB
Одновременно может быть обработано до 20 запросов.
CPU: 2core
memory: 1GB
SSD: 50GB
Одновременно может быть обработано до 80 запросов
CPU: 3core
memory: 2GB
SSD: 100GB
Одновременно может быть обработано до 200 запросов.

Было установлено, что система с числом пользователей около 20 человек будет работать без проблем с "CPU: 1core", "память: 512MB" и "SSD: 25GB".

2. Подробная информация о результатах измерений

Мы описали результаты измерений ранее, но если вас интересует, какие результаты мы описали, пожалуйста, ознакомьтесь также с подробностями результатов измерений, которые будут описаны в будущем.

2-1. измерения WEB/AP сервера (Apache, Tomcat)

Запрос был брошен в сценарии, когда пользователь входит в систему с экрана входа, а после входа отображается экран списка. Кстати, экран построен с использованием фреймворка Spring, включая функцию аутентификации.

Измерения показали следующие результаты.

  • Для 10 одновременных запросов⇒OK
  • Для 20 одновременных запросов⇒OK
  • Для 30 одновременных запросов⇒OK
  • Для 40 одновременных запросов⇒OK
  • Для 50 одновременных запросов⇒OK
  • Для 60 одновременных запросов⇒OK
  • Для 70 одновременных запросов⇒OK
  • Для 80 одновременных запросов⇒OK
  • Для 90 одновременных запросов⇒NG

Ошибка произошла в 90-м случае. Причиной была ошибка соединения с Apache. Состояние сервера в это время было следующим.

  • Загрузка процессора: 26%
  • использование памяти: 100%

Узким местом было полное отсутствие памяти.

Для тех, кто не очень в курсе, конфигурация многопроцессорного модуля Apache (MPM) выглядит следующим образом. MPM просто объясняется как настройка того, сколько Apache разрешено обрабатывать параллельно.

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

Для параметра "MaxRequestWorkers" интерес представляет значение "250". Это настройка для максимального количества дел, которые Apache может обрабатывать одновременно. '250', поэтому 250 случаев могут быть обработаны максимально параллельно, но если посмотреть на использование памяти, то на каждый случай используется около 8 МБ памяти.

Казалось, что Java использует 320 Мб памяти (248 Мб для кучи и 72 Мб для metaspace), а Apache 640 Мб памяти (8 Мб x 80 процессов), и хотя значение настройки MPM Apache равно '250', казалось, что он не может создать более '80' процессов.
Примечание: Сервер имеет 1 Гб памяти, поэтому общая память для Apache и Java составляет 960 Мб, что почти соответствует верхнему пределу.

Сервер AP (на стороне Java) работал нормально, поэтому узким местом был WEB-сервер (Apache).

Когда Apache и Tomcat установлены и запущены, мы обнаружили, что при характеристиках "CPU: 2 ядра, память: 1GB, SSD: 50GB", количество одновременных обращений "80" является предельным. (Предполагается, что параметры памяти для Java составляют 248M для heap и 72M для metaspace.)

2-2. рассмотрение

Отсюда следует, что поскольку память является узким местом, то при изменении памяти количество процессов, которые могут обрабатываться одновременно, увеличится.

(Присутствуют. (memory1GB))

  • memory: 1GB
  • Количество потоков Apache: 80 случаев.
  • Потребление памяти на поток в Apache: 8MB
  • Потребление памяти Apache: 640MB(80 случаев.×8MB)
  • Потребление памяти Tomcat: 320MB(248 млн. для HEAP., 72 м для метасферы.)
  • Потребление памяти Apache+Tomcat: 960MB

(после изменения(memory2GB))

  • memory: 2GB
  • Количество потоков Apache: 200 случаев
  • Потребление памяти на поток в Apache: 8MB
  • Потребление памяти Apache: 1600MB(200 случаев×8MB)
  • Потребление памяти Tomcat: 320MB(248 млн. для HEAP., 72 м для метасферы.)
  • Потребление памяти Apache+Tomcat: 1920MB

При наличии 2 Гб памяти можно одновременно обрабатывать 200 дел. Если увеличить память до 3 ГБ, то, кажется, можно будет выполнять больше одновременной обработки, но "MaxRequestWorkers (максимальное количество одновременно обрабатываемых дел)" в MPM Apache составляет "250", поэтому при дальнейшем увеличении памяти потребуется настройка и здесь. Также может потребоваться настройка памяти Java. И наоборот, если память уменьшится вдвое, это будет выглядеть следующим образом.

(после изменения(memory512GB))

  • memory: 512GB
  • Количество потоков Apache: 20 случаев
  • Потребление памяти на поток в Apache: 8MB
  • Потребление памяти Apache: 160MB(20 случаев×8MB)
  • Потребление памяти Tomcat: 320MB(248 млн. для HEAP., 72 м для метасферы.)
  • Потребление памяти Apache+Tomcat: 480MB

3. резюме

Описаны результаты измерения максимального количества случаев, которые WEB/AP серверы (Apache и Tomcat) могут обрабатывать одновременно. Было установлено, что система с числом пользователей около 20 человек будет работать без проблем с "CPU: 1core", "память: 512MB" и "SSD: 25GB".

Исследование основано на предположении, что никакое другое программное обеспечение не работает с предельной производительностью. Рекомендуется выбирать спецификацию с небольшим запасом, поскольку это предельная величина.

■INFORMATION

Статьи


■PROFILE

Профиль


■Контакты

Контакты