Оптимизация nginx - Очистка кеша
В процессе работ по шареду нашел проблему в 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