[patch] Боремся с переполнением spool

Andrey Zonov andrey.zonov at gmail.com
Fri Mar 27 10:45:45 MSK 2009


  Доброе утро.

  Сделал костыль который решает проблему с пустым ответом при 
переполнении spool-а. Теперь proxy_temp_path и 
proxy_store/proxy_cache_path можно разнести на разные диски и при 
переполнении proxy_store/proxy_cache_path не будет происходить отдача 
пустого тела.

  Как это работает (во freebsd):
1. патчим, пересобираем, инсталлируем и делаем upgrade
  cp patch-ngx_file.c patch-ngx_files.c patch-ngx_files.h 
/usr/ports/www/nginx-devel/files
  cd /usr/ports/www/nginx-devel && make deinstall install clean
  /usr/local/etc/rc.d/nginx upgrade
2. создаём memory-disk на N мб
  mdconfig -a -t malloc -o reserve -s Nm
  newfs ... /dev/md0
  mkdir /data/nginx/spool
  mount /dev/md0 /data/nginx/spool
  chown nobody /data/nginx/spool
3. меняем в конфиге
  proxy_temp_path         /data/nginx/cache/spool ...
  proxy_cache_path        /data/nginx/cache ...
на
  proxy_temp_path         /data/nginx/spool ...
  proxy_cache_path        /data/nginx/cache ...
4. релоадим nginx
  /usr/local/etc/rc.d/nginx reload
5. смотрим логи...

Недостатки:
    * большее потребление cpu
    * при переполнении proxy_store/proxy_cache_path сыплются ошибки в 
error лог о нехватке места (хотя это поведение не сложно изменить)
Достоинства:
    * можно использовать весь выделенный объём ресурсов для хранения кеша
    * можно отрывать "следилки" за переполнением диска
    * если proxy_temp_path и proxy_store/proxy_cache_path остаются жить 
на одном диске - для вас ни чего не меняется
Патч для 0.7.44.

PS: хочется конечно получить "ручки" от автора.
Мне видится несколько:
    * возможность замапить spool в памяти заданного размера
    * что-то на подобие моего патча, но с возможностью вкл/выкл - ввиде 
строки в конфиге
    * для мелких файлов (размер задавать через конфиг) делать mmap 
вместо read (хотя в случае с memory disk - это не принципиально)

-- 
Andrey Zonov





More information about the nginx-ru mailing list