Увеличиваем производительность сайта. Часть 2

0
(0)

В прошлой статье я рассказывал как можно увеличить производительность сайта на wodpress за счет тюнинга nginx + php-fpm.

Сегодня будем увеличивать производительность за счет плагина W3 Total Cache. Сам по себе он уже дает ощутимый прирост по производительности в базовой настройке. Мы же протестируем его использования совместно с redis и memcached.

Делаем замеры производительности перед использованием плагина:

Получаем всего 14 РПС.

Устанавливаем плагин W3 Total Cache. В боковом меню должна появится вкладка «Performance».

Идем в «Настройки» — «Основные настройки». Нам нужно включить следующее:

  1. Кеш страницы. Ставим то, что доступно, скорее всего это будет Disk.
  2. Кэш OpCode — так как у меняя уже включен opcache, плагин это увидел и проставил автоматически.
  3. Кэш базы данных — также Disk.
  4. Кэш объекта — Disk.
  5. Кэш браузера — просто включаем.

Настроек гораздо больше, но мы сегодня касаемся только кеша.

Итак, делаем сохраняем и делаем замеры после включения плагина.

Результаты уже поражают. Latency и РПС выросли почти в 15 раз.

В целом можно было бы оставить и так, но мы хотим еще больше скорости.

Тестируем с memcached:

Устанавливаем memcached. У меня старенький centos 7, но принцип в целом один и тот же, на любом дистрибутиве.

Bash
yum install memcached
yum install libmemcached
Bash
# cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1024"
OPTIONS="-t 8 -l 127.0.0.1 -U 0"

Из важного тут:

CACHESIZE — размер кеша в МБ. У меня на сервере в среднем доступно 2ГБ, следовательно 1ГБ под кеш можно легко выделить.

OPTIONS — запускаем на localhost. Устанавливаем 8 поток (по умолчанию 4) и отключаем использование UDP.

Запускаем и проверяем работу:

Bash
systemctl start memcached
memcached-tool 127.0.0.1 stats

В ответ мы увидим нечто вроде:

Устанавливаем расширения для php:

Bash
yum install php82-php-memcached
yum install php82-php-memcache

memcache без «d» на конце, по сути тоже самое, только более старое расширение. Его установка опциональна.

Лично у меня все установленные модули складируются в отдельную директорию, следовательно нужно ее прописать в php.ini:

Bash
extension_dir = "/opt/remi/php82/root/usr/lib64/php/modules/"

Далее включаем расширение. В centos 7 нет phpenmod утилиты, включить можно через добавление соответствующего файла в /etc/php.d/

Bash
###10-memcache.ini
; Enable memcache extension module
extension=memcache
###20-memcached.ini
; Enable memcached extension module
extension=memcached

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

Чтобы их избежать установить msgpack и igbanary расширение.

Первыми должны быть загружены: memcache, msgpack, opcache, igbinary.

У меня это просто правильное наименование файлов .ini. В ubuntu например это правильный порядок перечисления расширений для команды phpenmod.

Проверить загруженные модули можно так:

Bash
php -m |grep memcache

Перезагружаем php-fpm и в настройках плагина меняем Disk на memcached. Теперь он должен быть доступен.

Делаем контрольные замеры:

Да, по сравнению с первоначальным скачком, мы не сильно улучшили производительность, дело в том, что плагин «из коробки» неплохо настроен и дает очень хорошие показатели. Даже не смотря на это, мы выиграли 3 РПС и смогли снизить latency.

Тестируем с redis:

Устанавливаем redis и его расширение для php. Для centos 7 это выглядит так:

Bash
yum install rh-redis6-redis
systemctl start rh-redis6-redis.service
ln -s /opt/rh/rh-redis6/root/usr/bin/redis-cli /bin/redis-cli
yum install php82-php-redis

Включаем модуль для php, заходим в redis и смотрим наличие ключей:

Bash
redis-cli
keys *

Ключей на данный момент нет, так и должно быть.

Далее в настройках плагина меняем все на redis.

Сохраняем и запускаем тест wrk:

Результат примерно такой же, но с memcached latency все же был лучше.

Вот таким образом имея достаточно «базовые» настройки плагина и приложения для кеширования мы увеличили производительность примерно в 15 раз.

Насколько статья полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Оставить комментарий