Почему Moodle падает именно в сессию
Система работала весь семестр без сбоев, а в день экзамена пятьсот студентов одновременно нажимают «Начать тест» — и сервер ложится. Причина в том, что обычная нагрузка и пиковая отличаются в разы. Тестирование, особенно синхронный экзамен, создаёт всплеск, к которому сервер не готовили. Нагрузочное тестирование заранее показывает потолок системы.
Что такое нагрузочное тестирование
Это имитация массового одновременного захода пользователей с помощью специальных инструментов. Вы воспроизводите реальный сценарий — вход, открытие теста, отправка ответов — для сотен виртуальных пользователей и смотрите, при каком количестве растёт время отклика и начинаются ошибки. Так вы узнаёте реальный лимит до того, как его узнают студенты на экзамене.
Инструменты
| Инструмент | Особенности |
|---|---|
| Apache JMeter | Классика, GUI, готовые планы для Moodle |
| k6 | Сценарии на JavaScript, удобен для CI |
| Locust | Сценарии на Python, простой старт |
| Moodle util/performance | Встроенные средства генерации данных |
JMeter остаётся самым популярным: для Moodle есть готовые тест-планы, эмулирующие логин и прохождение теста с корректной обработкой токенов сессии.
Сколько одновременных пользователей закладывать
Считать нужно не общее число студентов, а пик одновременных активных. Если на потоке 2000 человек, но экзамен идёт по подгруппам, одновременно может работать 200–300. Закладывайте запас в полтора-два раза от ожидаемого пика. Тестируйте именно сценарий теста с автосохранением ответов — он тяжелее обычного просмотра страниц.
Где обычно узкое место
- База данных. Чаще всего упирается в MySQL/MariaDB или PostgreSQL: не хватает соединений или памяти под буферы.
- PHP-FPM. Лимит воркеров: при пике запросы встают в очередь.
- Кеш. Без Redis для MUC кеш-сессий и приложения сервер тратит ресурсы впустую.
- Диск. Медленный диск под moodledata тормозит отдачу файлов.
Что делать с результатами
По итогам теста вы либо подтверждаете, что текущего сервера хватает, либо получаете план: добавить оперативную память и воркеры PHP-FPM, подключить Redis, вынести БД на отдельный сервер, а при больших масштабах — настроить балансировку на несколько узлов приложения. Многое решается и без покупки железа — оптимизацией конфигурации PHP, БД и кеша.
Вывод
Нагрузочное тестирование за пару недель до сессии стоит несравнимо дешевле, чем сорванный экзамен и репутационный удар. Один прогон показывает потолок и конкретные узкие места. Проведу нагрузочное тестирование вашего Moodle и подготовлю сервер к пиковой сессии — напишите заранее.
Опишите задачу — расскажу, как решить её конкретно в вашем случае. Свяжитесь — разберём вместе.