тел.: 8(961)008-77-55

moodle logo speedДошли руки до Moodle и сервера, на котором он расположен, точнее вынудили обстоятельства. Moodle начал очень сильно тормозить, это на двух процессорах E5440, из которых выделено 80% на виртуальную маши. При обращении более 10 пользователей MySQL грузил все 8-мь ядер на 100% в течении 10 минут. Чего делал:

Правильно настроил cron для Moodle

После установки Moodle, в папке, вы найдете /admin/cron.php, который должен регулярно запускаться в фоновом режиме. Вы должны правильно настроить в процессе установки и настройки, но... если вы переносите Moodle на другой сервер или хостинг - об этой настройке можно забыть.

cron.php запускает отправку почты, обновление отчетов Moodle, RSS-каналов, завершение действий, размещение сообщений на форуме и другие задачи.

По сути, все дело состоит в том, чтобы добавить одну команду в список операций cron в вашей системе. В системах на основе Unix этот список представляет собой файл под названием «crontab», который есть у всех пользователей.

Очень много споров и обсуждений на тему правильной настройки cron для Moodle, но как по мне - все однозначно описано в документации, рассмотрены все возможные варианты для всех типов ОС. Сервер, наш, Ubuntu 16 лучше всего выполнить следующий порядок действий:

запустить команду crontab -e и в файле добавить строку */15 * * * * /usr/bin/wget http://site.ru/moodle/admin/cron.php /которая будет запускать cron каждые 15 минут. Есть побочный эффект - в папке пользователя, со временем, будет очень много файлов типа cron.php.xxx, но они показывают, что cron работает))) Если такой расклад вас не устраивает - используйте (рекомендуется) */15 * * * * /usr/bin/php /path/to/moodle/admin/cli/cron.php >/dev/null

Оптимизация таблиц базы данных в PHPMyAdmin

Оптимизация таблиц или дефрагментация индексов таблиц необходима, так как в базе данных Moodle постоянно добавляются и удаляются данные (записи). Проще говоря оптимизация таблиц БД позволяет убрать «пустые» ключи, тем самым ускоряя в будущем операции выборки, а так же уменьшает общий размер базы данных.

Чтобы выполнить оптимизацию таблиц в phpMyAdmin необходимо:phpmyadmin min

  • Нажимаем на пункт «Базы данных» в верхнем меню, или в окне слева выбираем нашу БД, щелкая по ней.
  • Нам буде показан список всех таблиц БД. Теперь прокручиваем список в самый низ, нажимаем «Отметить все» и после этого из выпадающего списка «С отмеченными» выбрать «Оптимизировать таблицу».
  • После успешной оптимизации вы увидите сообщение "SQL-запрос успешно выполнен".

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

В моем случае, общий размер таблиц базы данных уменьшился с 253,5Mb до 204,3Mb.

Ускоряем (оптимизируем) Apache

Включает кэш браузера. Установим модуль Apache mod_expires или mod_headers командами (оба модуля использовать ни к чему):

sudo a2enmod expires

или

sudo a2enmod headers

перезагрузим сервер Apache:

sudo service apache2 reload

Я использовал модуль expires и в файл .htaccess добавил:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 day"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
</IfModule>

Если вы будите использовать headers в файл .htaccess нужно добавить:

<ifModule mod_headers.c>
#10_min
<FilesMatch "\.(html|htm|php|xml|txt)$">
Header set Cache-Control "max-age=600, must-revalidate"
</FilesMatch>
#1_week
<FilesMatch "\.(ads|jcn|js|css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
#1_month
<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png|pdf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
</IfModule>

Об этом можно прочесть здесь

Рекомендуется включить сжатие ответов Apache средствами модуля mod_deflate, в файл .htaccess добавляем:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
<IfModule mod_setenvif.c>
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
</IfModule>

Можно почитать здесь

PHP акселератор

В моей ситуации используется PHP Version 7.0.32-0ubuntu0.16.04.1 и настройка акселератора не особо актуальна, используется OPCache и он уже включен, единственной что можно сделать (можно и не делать, из коробки все работает хорошо) - увеличить количество ресурсов для кэширования в php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000 

Можно почитать для общего развития здесь.

speed low minspeed good minРезультат оптимизации

Проверял в PageSpeed Insights, вот итоги

до

  • для мобильных 21 / 100 Low
  • для компьютеров 69 / 100 Medium

после

  • для мобильных 61 / 100 Medium
  • для компьютеров 87 / 100 Good

 

Добавить комментарий