Когда это становится проблемой
Страница курса загружается 8 секунд. Во время сессии сайт «ложится» при 50 одновременных пользователях. Преподаватели жалуются, что журнал оценок зависает. Если что-то из этого про вас — эта статья поможет найти и устранить причину.
Хорошая новость: в большинстве случаев медленный Moodle — это не «слабый сервер», а несколько конкретных настроек, которые можно исправить без замены железа.
Шаг 1: встроенная диагностика
Откройте: Администрирование сайта → Сервер → Обзор производительности. Moodle покажет список потенциальных проблем с рекомендациями. Обратите особое внимание на:
- Статус кэширования — включён ли MUC cache
- PHP OPcache — включён и настроен ли
- Размер базы данных и логов
- Статус cron — когда последний раз выполнялся
Шаг 2: кэширование — самый важный пункт
По умолчанию Moodle хранит кэш в файловой системе. Для 100+ одновременных пользователей это узкое место. Подключение Redis радикально улучшает ситуацию — ускорение в 3–5 раз по моему опыту.
Установите Redis на сервер, добавьте в config.php:
- Перейдите в Администрирование → Плагины → Кэширование → Конфигурация
- Добавьте Redis как хранилище: хост 127.0.0.1, порт 6379
- Назначьте Redis для Application cache и Session cache
Шаг 3: PHP OPcache
OPcache кэширует скомпилированный PHP-код — без него PHP перекомпилирует каждый файл при каждом запросе. Для Moodle (тысячи PHP-файлов) это огромная нагрузка. Проверьте в php.ini:
- opcache.enable=1
- opcache.memory_consumption=256
- opcache.max_accelerated_files=20000
- opcache.revalidate_freq=60
Шаг 4: очистка логов базы данных
Таблица mdl_logstore_standard_log растёт непрерывно и может достигать нескольких гигабайт за год работы. Медленные запросы к этой таблице замедляют весь сайт. Настройте автоматическую очистку: Администрирование → Плагины → Журналы → Стандартный журнал → установите «Хранить логи не более 180 дней».
Шаг 5: cron Moodle
Cron Moodle выполняет фоновые задачи: отправку уведомлений, обработку оценок, очистку сессий. Если cron не работает или работает редко — задачи накапливаются и «взрываются» при следующем запуске, нагружая сервер. Проверьте: cron должен запускаться каждую минуту через системный crontab.
- Команда:
* * * * * php /var/www/moodle/admin/cli/cron.php >> /dev/null 2>&1 - Проверьте дату последнего выполнения: Администрирование → Сервер → Задачи → Плановые задачи
Шаг 6: оптимизация базы данных
Периодически выполняйте ANALYZE / OPTIMIZE для MySQL или VACUUM ANALYZE для PostgreSQL — это обновляет статистику для планировщика запросов. Проверьте наличие пропущенных индексов: Администрирование → Сервер → База данных → Отсутствующие индексы.
Когда нужен более мощный сервер
Если все шаги выполнены, а система всё равно не справляется с нагрузкой — пора масштабироваться. Признаки: CPU постоянно 80%+, RAM заканчивается, disk I/O в красной зоне. В этом случае увеличение ресурсов сервера или переход на кластерную архитектуру — объективная необходимость.
Проведу диагностику и ускорю ваш Moodle — опишите симптомы, разберёмся.
Опишите задачу — расскажу, как решить её конкретно в вашем случае. Свяжитесь — разберём вместе.