Ускорение загрузки страниц: mod_pagespeed + Memcached на Ubuntu 15.10
Введение
Время загрузки страницы влияет на поведение пользователей и на ранжирование в поисковых системах. Google PageSpeed Insights и инструменты разработчика в браузерах помогают измерять текущее время загрузки. Модуль mod_pagespeed для Apache оптимизирует и кеширует содержимое сайта перед отправкой в браузер, что уменьшает нагрузку на сервер и увеличивает число страниц в секунду, которые сервер способен отдавать.
По умолчанию mod_pagespeed использует кеш на файловой системе. В этом руководстве мы заменим файловый кеш на Memcached — быстрый кеш в памяти — чтобы дополнительно снизить задержки при генерации страниц. Инструкции ориентированы на Ubuntu 15.10 (Wiley Werewolf), но в большинстве случаев применимы и к другим версиям Ubuntu и Debian-подобным системам.
Важно: перед внесением изменений сделайте резервную копию конфигураций Apache и текущих настроек сервера.
Быстрый план действий
- Определить архитектуру системы (32/64 бит).
- Установить пакет mod_pagespeed от Google.
- Установить и запустить Memcached.
- Изменить конфигурацию mod_pagespeed, указав серверы Memcached.
- Перезапустить Apache и проверить работу.
Как определить 32- или 64-битную систему
Выполните команду:
uname -aЕсли в выводе присутствует строка “x86_64”, система использует 64‑битное ядро — применяйте 64‑битный пакет mod_pagespeed. В противном случае используйте 32‑битный пакет.
Установка mod_pagespeed
Google предоставляет .deb-пакеты mod_pagespeed для 32‑ и 64‑битных Ubuntu.
Ubuntu 64 bit (рекомендуется для большинства серверов):
cd /tmp
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
dpkg -i mod-pagespeed-stable_current_amd64.debUbuntu 32 bit:
cd /tmp
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.deb
dpkg -i mod-pagespeed-stable_current_i386.debЗатем перезапустите Apache, чтобы подхватить модуль и его конфигурацию:
service apache2 restartУстановка Memcached
Memcached доступен в репозитории Ubuntu и устанавливается через apt:
apt-get -y install memcachedПроверьте, запустился ли демон Memcached, выполнив:
netstat -tap | grep memcachedВ выводе netstat будет отображён адрес и порт (обычно localhost:11211). Этот порт понадобится при настройке mod_pagespeed.
Если вы хотите использовать Memcached не только для mod_pagespeed, но и для PHP‑приложений, установите расширение PHP:
apt-get install php5-memcachedВажно: если на сервере ограничено доступное ОЗУ, оцените нагрузку и объём памяти, выделяемый Memcached, прежде чем увеличивать память для кеша.
Настройка mod_pagespeed для использования Memcached
Откройте файл конфигурации pagespeed в вашем любимом редакторе. Пример с nano:
nano /etc/apache2/mods-available/pagespeed.confНайдите строку, содержащую ModPagespeedMemcachedServers (может быть закомментирована):
[....]
# ModPagespeedMemcachedServers localhost:11211
[....]Уберите символ # в начале строки, чтобы указать Memcached как бэкенд для хранения:
[....]
ModPagespeedMemcachedServers localhost:11211
[....]Если на сервере достаточно памяти, можно дополнительно активировать общий метаданные‑кеш в памяти, убрав # перед строкой:
[....]
ModPagespeedCreateSharedMemoryMetadataCache "/var/cache/mod_pagespeed/" 51200
[....]После правок перезапустите Apache:
service apache2 restartТеперь mod_pagespeed будет использовать Memcached как хранилище кеша.
Проверка статуса Memcached и статистика
Получить статистику Memcached можно с помощью nc:
echo stats | nc 127.0.0.1 11211Пример вывода (не изменяйте, это пример командной подсказки):
root@server1:/tmp# echo stats | nc 127.0.0.1 11211
STAT pid 1636
STAT uptime 254
STAT time 1460561250
STAT version 1.4.24 Ubuntu
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.000000
STAT rusage_system 0.020000
STAT curr_connections 6
STAT total_connections 8
STAT connection_structures 7
STAT reserved_fds 20
STAT cmd_get 34
STAT cmd_set 15
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 14
STAT get_misses 20
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 8573
STAT bytes_written 22539
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 6856
STAT curr_items 9
STAT total_items 15
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
ENDНажмите Ctrl+C, чтобы вернуться к приглашению командной строки.
После того как кешы заполнятся (возможно потребуется несколько перезагрузок страниц при малом трафике), повторно протестируйте сайт с помощью PageSpeed Insights или инструментов браузера.
Что делать, если ускорение не заметно (когда это не помогает)
- Сайт уже отдаёт статические ресурсы через CDN — локальный Memcached может дать небольшое улучшение.
- Медленная генерация динамического контента в коде приложения: кеширование на уровне приложения (например, кеширование SQL-запросов) важнее, чем кеширование выходного HTML.
- Неправильная конфигурация mod_pagespeed или конфликт с другими модулями Apache может препятствовать применению оптимизаций.
Если ускорение незначительное, проверьте журнал Apache и логи mod_pagespeed, чтобы найти ошибки или предупреждения.
Альтернативные подходы и совместимость
- Varnish Cache — обратный прокси для HTTP с поддержкой высокопроизводительного кеширования; полезен для кеширования целых страниц.
- Redis — альтернатива Memcached с возможностью персистентности и более богатыми структурами данных.
- Файловый кеш (по умолчанию в mod_pagespeed) — прост в настройке, но медленнее по сравнению с кешем в памяти.
Совместимость: инструкции ориентированы на Ubuntu 15.10, но большинство шагов актуальны для более новых Ubuntu LTS и Debian‑производных. При обновлении дистрибутива проверьте доступность соответствующих пакетов и требования модулей.
Ментальная модель: уровни кеширования
- Уровень 1 — CDN/edge: статические и широко раздаваемые ресурсы.
- Уровень 2 — веб‑сервер (mod_pagespeed + Memcached): оптимизация и быстрый кеш на уровне сервера.
- Уровень 3 — приложение: внутренняя логика, кеширование результатов дорогостоящих вычислений.
Правильная комбинация уровней даёт наибольший выигрыш в скорости и масштабируемости.
Чеклист для администратора (быстрый)
- Определить архитектуру (uname -a).
- Установить mod_pagespeed (dpkg -i соответствующий .deb).
- Установить memcached (apt-get install memcached).
- Включить ModPagespeedMemcachedServers в pagespeed.conf.
- При необходимости включить ModPagespeedCreateSharedMemoryMetadataCache.
- Перезапустить Apache и проверить работу (service apache2 restart).
- Оценить результаты через PageSpeed Insights и логи.
Шпаргалка: основные команды
- Узнать архитектуру:
uname -a- Установка mod_pagespeed (64‑bit example):
cd /tmp
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
dpkg -i mod-pagespeed-stable_current_amd64.deb- Установка memcached и PHP‑расширения:
apt-get -y install memcached
apt-get install php5-memcached- Проверка Memcached:
netstat -tap | grep memcached- Статистика Memcached:
echo stats | nc 127.0.0.1 11211Критерии приёмки
- mod_pagespeed успешно установлен и активен в Apache.
- Memcached запущен и доступен на порту (по умолчанию 11211).
- В /etc/apache2/mods-available/pagespeed.conf указана строка ModPagespeedMemcachedServers localhost:11211.
- Тесты PageSpeed Insights показывают улучшение показателей загрузки (или наблюдается уменьшение времени ответа сервера и нагрузки при нагрузочном тестировании).
Факто‑бокс: ключевые числа
- Порт Memcached по умолчанию: 11211
- Пример limit_maxbytes в выводе stats: 67108864 (примерное значение, байты)
- Команды перезапуска Apache: service apache2 restart
Заключение
Переключение mod_pagespeed на использование Memcached даёт быстрый и сравнительно простой способ снизить задержки при отдаче оптимизированного контента. Этот способ особенно полезен для сайтов с динамическим содержимым, где генерация HTML занимает значительные ресурсы. Комбинируйте кеширование на нескольких уровнях и мониторьте показатели, чтобы добиться устойчивого улучшения производительности.
Примечание: если вы используете CDN, обратный прокси (например, Varnish) или специализированные решения в облаке, сравните подходы и выберите комбинацию, наиболее подходящую для вашей архитектуры.
Ссылки
- Google pagespeed tools
- memcached.org