Оптимизация nginx - Очистка кеша


Рубрика: Администрирование -> Полезности
Метки: | |
Просмотров: 3675

В процессе работ по шареду нашел проблему в nginx (не чистится клиентский кэш)

Ниже приведет алгоритм моих действий и результат.

Удаляем кеш клиентов nginx за последние 7 дней

find /var/cache/nginx/client_temp/ -type f -atime +7 -print -delete

Уменьшаем размер кеша под nginx

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:5m max_size=1000m;

Уменьшить желательно до max_size=50m;

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

50m вполне достаточно для нормальной работы кэширования. Слишком большой размер кэша приводит к накоплению большого количества файлов кэша и повышенный iowait от постоянного перебора этих файлов в nginx.

Кроме этого в настройках кэширования не было параметра inactive, это и привело к основной проблеме, поскольку файлы не чистились и тот 1 ГБ, который был выделен, сейчас забит пустыми файлами, которые занимают айноды и приводят к тому, что nginx ищет активный кэш очень долго.

После очистки и настройки параметра inactive кэш начнет работать эффективнее.

Применил правило удаления неактивного кэша, к которому не было запросов больше 7 дней. Секция кэширования теперь выглядит так:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:5m inactive=7d max_size=1000m;

После проверки через неделю заметил, что nginx самостоятельно не удаляет все файлы неактивного кэша. Сегодня проверил, как минимум вижу, что к некоторым файлам не было запросов больше 10 дней.

Во первых командой

du -scBM /var/cache/nginx/client_temp/
было замечено что директория кэша превышает максимальный разрешенный объем

Во вторых в директории есть файлы, доступ к которым запрашивался больше 7 дней назад

Проверяем командой

find /var/cache/nginx/client_temp/ -type f -atime +7 -print | wc -l

И проблема в нагрузке на сервер не только в самом nginx, а например, в тех же clamav, locate и т.д., которые периодически перебирают/сканируют эти файлы и тем самым из-за большого их количесва отрабатывают "тяжело и медленно".

Чтобы это все не накапливалось, поставил задание в крон, чтобы ежедневно удалялись неактивные файлы кэша, к которым не было запросов больше 7 дней

33 3 * * * find /var/cache/nginx/client_temp/ -type f -atime +7 -delete > /dev/null 2>&1

После очистки по крону, проблема решилась и больше кеш не скапливается лишний.

Автор: BuxarNET (Тяшкевич Виталий) для IntFAQ.ru, по инструкции от хостинг провайдера Buxar-Host.ru