Очиска файлов кэша pagespeed-модуля

archive view archive save

nginx-logo.jpg Для для веб-серверов Nginx и Apache существует модуль оптимизации контента, который в свою очередь в уже оптимизированном виде кэшируется в директорию по-умолчанию "/var/cache/pagespeed/", а устаревшие файлы кэша могут доставлять неудобства при регулярном обновлении скриптов.

Способ №1 - очистка файлового кэша pagespeed ака Legacy mode

По запросу "pagespeed clean cache" массово предлагается создавать в базовой директории кэша (по-умолчанию "/var/cache/pagespeed/") некий файл "cache.flush" с дальнейшей перезагрузкой веб-страницы без перезагрузки самого сервера, - однако нигде не говорится, что данный способ "Legacy mode" является утсаревшим и для его успешного применения необходимо дабы аргумент EnableCachePurge был «off», который в новых версиях по умолчанию планируется «on».

Legacy Flushing Of Entire Cache
https://www.modpagespeed.com/doc/system#flush_cache_legacy

By default, the system is configured to support only whole-cache flushes — we'll call this legacy mode. As of version 1.9.32.1, it can be configured to also allow purging of individual URLs. The two modes operate differently and you may choose between them for each virtual host. Legacy mode is on by default, to provide compatibility with existing scripts and other infrastructure that might have been built around it. In a future release, individual URL purging will become the default. Subsequent to that, the legacy whole-cache flushing mode will be eliminated. You can choose between the two modes with the EnableCachePurge argument. If set to "on" you will get the new behavior, with individual URL purging, while "off" will give you the legacy behavior. The default is "off".

---

По умолчанию система настроена на поддержку только сбросов всего кэша - мы назовем этот устаревший режим. Начиная с версии 1.9.32.1, он также может быть настроен для очистки отдельных URL-адресов. Два режима работают по-разному, и вы можете выбирать между ними для каждого виртуального хоста. Стандартный режим включен по умолчанию, чтобы обеспечить совместимость с существующими сценариями и другой инфраструктурой, которая могла бы быть построена вокруг него. В будущем выпуске отдельная очистка URL станет значением по умолчанию. После этого устаревший режим очистки всего кэша будет исключен. Вы можете выбрать один из двух режимов с помощью аргумента EnableCachePurge. Если установлено значение «вкл.», Вы получите новое поведение с отдельной очисткой URL, а «выкл.» Даст вам устаревшее поведение. По умолчанию установлено значение «off».

Если мы хотим временно отключить использование кэша, то EnableCachePurge must by «on», делаем "touch /var/cache/pagespeed/cache.flush" и спустя сек 5 (так в документации) просто перезагружаем страницу, а дабы снова использовать кэш просто удаляем созданный ранее файл "cache.flush".

Способ №2 - ручное удаление файлового кэша pagespeed

"Наши умные науки, в наши мускульные руки, штуки разные вложили...Мы им будем удалять."

Думаю здесь предельно всё ясно. Ненайдя ничего лучшего можно тупо удалять директорию с кэшем, после перезагрузки сервера директория кэша будет создана автоматически.

Способ №3 - автоочистка файлового кэша pagespeed по-феншую

Первыми двумя вариантами забиты все Интернеты, но ведь должен же быть такой "феншуёвый" вариант конфигурации, при котором кэш pagespeed-модуля очищался автоматически через нужный нам интервал времени?! Для настройки регулярной автоматической очиски файлов кэша pagespeed-модуля пришлось ковырять документацию ибо готового и "пережеванного" варианта в Интернетах необнаружилось.

Начинаем "гульчитать":

Configuring the File Cache
https://www.modpagespeed.com/doc/system#file_cache

PageSpeed must be configured with a path where it can write cache files, tuned to limit the amount of disk space consumed. The file cache can be placed on a tmpfs partition or on a physical disk. The file cache has a built-in LRU mechanism to remove old files, targeting a certain total disk space usage, and a certain interval for the cleanup process.

It is important to note that FileCacheSizeKb and FileCacheInodeLimit do not define absolute limits on the cache size and inode count. The cache cleaning process will run at the time interval defined by FileCacheCleanIntervalMs, and will only initiate cleaning if the cache size exceeds FileCacheSizeKb or the cache inode count exceeds FileCacheInodeLimit. When cache cleaning is initiated, the oldest files in the cache will be removed until the cache size is under 0.75 * FileCacheSizeKb and the inode count is under 0.75 * FileCacheInodeLimit.

Warning: Because the file cache cleaner does not impose a tight bound on disk usage, if your site is large and receives heavy traffic PageSpeed's cache can expand to fill your entire disk. If this becomes a problem you must either use a sufficiently large disk that this can't happen, or a cache whose size is guaranteed to be bounded. Bounded caches include keeping your file cache on a PageSpeed-specific partition, memcached, and redis.

---

PageSpeed должен быть настроен с путем, в который он может записывать файлы кэша, настроенный для ограничения количества используемого дискового пространства. Файловый кеш может быть размещен на разделе tmpfs или на физическом диске. Кэш файлов имеет встроенный механизм LRU для удаления старых файлов, нацеленный на определенное общее использование дискового пространства и определенный интервал для процесса очистки.

Важно отметить, что FileCacheSizeKb и FileCacheInodeLimit не определяют абсолютные ограничения на размер кэша и количество узлов. Процесс очистки кэша будет запускаться через интервал времени, определенный FileCacheCleanIntervalMs, и будет запускать очистку только в том случае, если размер кэша превышает FileCacheSizeKb или число инодов кэша превышает FileCacheInodeLimit. Когда инициируется очистка кеша, самые старые файлы в кеше будут удаляться до тех пор, пока размер кеша не станет ниже 0,75 * FileCacheSizeKb, а число инодов не достигнет 0,75 * FileCacheInodeLimit.

Предупреждение: поскольку очиститель файлового кэша не накладывает жестких ограничений на использование диска, если ваш сайт большой и получает большой трафик, кэш PageSpeed может расширяться, чтобы заполнить весь ваш диск. Если это становится проблемой, вы должны либо использовать достаточно большой диск, чтобы этого не произошло, либо кеш, размер которого гарантированно ограничен. Ограниченные кеши включают хранение файлового кеша на специфичном для PageSpeed разделе, memcached и redis.

Значит принципы автоматической очиски кэша такие:

  1. Механизм LRU - Least recently used (LRU, Вытеснение давно неиспользуемых): в первую очередь, вытесняется неиспользованный дольше всех. Алгоритмы кэширования — Википедия
  2. По умолчанию предполагается, что FileCacheSizeKb = 102400 (100 МБ), FileCacheInodeLimit = 500000, а FileCacheCleanIntervalMs = 3600000 (1 час)
  3. Кэш не ограничен лимитами FileCacheSizeKb и FileCacheInodeLimit и может превысить их вплоть до заполнения всего диска, а очищаться начнёт, когда пройдёт время FileCacheCleanIntervalMs и будет достигнут лимит FileCacheSizeKb или FileCacheInodeLimit, а очистка прекратится после понижения размера занимаемого кэша до уровня "0,75 * FileCacheSizeKb" (102400 * 0,75 = 76800 kb) и "0,75 * FileCacheInodeLimit" (500000 * 0,75 = 375000 inode).

Короче горворя удаляется только 25% от лимитов FileCacheSizeKb/FileCacheInodeLimit через интервал FileCacheCleanIntervalMs по принцыпу LRU (Least recently used).

Но нам бы автоматически удалять весь кэш, ну или хотя бы почти весь, а для этого мы можем сделать FileCacheSizeKb = 2, FileCacheInodeLimit = 2 и соответственно установить необходимый интервал FileCacheCleanIntervalMs.

Метка времени последней очистки кэша сохраняется в файле "/var/cache/pagespeed/!clean!time!" и обновляется при каждой следующей очистке кэша.

Ахтунг!


Следует также отметить, что проверка метки времени и соответственно очистка кэша по прошествии FileCacheCleanIntervalMs выполняется только при каждом обращении к хосту (т.е. при посещении сайта), а если обращений к хосту нет, то соответственно "/var/cache/pagespeed/!clean!time!" не проверяется, кэш не очищается, - это поведение pagespeed-модуля выявлено опытным путём, когда FileCacheSizeKb/FileCacheInodeLimit = 2, FileCacheCleanIntervalMs = 600000 (60 сек), но временная метка "/var/cache/pagespeed/!clean!time!" обновлялась с различными интервалами (2, 3, 5 мин) и только при активном посещении сайта очистка кэша и обновление метки происходило с интервалом 60 сек.


Комментарии в блоге
Новое на форуме