proxy_cache и большой кэш

Игорь Хомяков homyakov на embria.ru
Пн Дек 14 11:58:54 MSK 2009


Здравствуйте !

=== Вводная часть ===
Есть несколько серверов  которые должены работать как кэш для картинок,
конфиг одинаковый
FreeBSD 7.2-STABLE amd64
nginx version: nginx/0.7.64
Память 6Gb
Диски 3 x SATA HDD

3 дисковых кэша + 1 memory disk

на каждый диск создан proxy_cache_path
proxy_cache_path  /disk0/cache levels=1:2 keys_zone=DISK0:64m inactive=3d;

Запросы распределены по дисковым кешам с помощью location-ов более
менее равномерно.

proxy_cache_valid  200 301 302 304 72h;

proxy_cache_use_stale   updating error timeout invalid_header;
proxy_ignore_client_abort on;
proxy_cache_min_uses    1;

worker_processes  4;
worker_connections  8192;

sendfile        on;
tcp_nopush     on;
tcp_nodelay      on;

keepalive_timeout  1;
reset_timedout_connection on;

На кэш сервер прилетает около  700 запросов в сек.

обычный top выглядит так
load averages:  0.05,  0.08,  0.08
33 processes:  1 running, 32 sleeping
CPU:  1.3% user,  0.0% nice,  2.3% system,  0.4% interrupt, 96.0% idle
Mem: 172M Active, 69M Inact, 5510M Wired, 174M Cache, 623M Buf, 5992K Free
Swap: 4096M Total, 52M Used, 4044M Free, 1% Inuse, 48K In

заполняемость кешей в среднем  20Gb для HDD и 2Gb для memory disk

=== Проблема ===

1-2 дня все работает нормально, идет процесс заполнения кешей, затем сервер
начинает уходить в swap ростет кол-во чтений на дисках (по gstat),
lsof показывает что
nginx читает кэш на диске. отдача тормозит сервер выпадает из
upstream-ов.  иногда это заканчивается
тем что сервер вообще перестает отвечать. через 10-15 минут после
отключений трафика всё приходит в норму

Есть подозрение что в эти моменты cache manager чистит inactive записи
и "забивает" дисковый ввод-вывод

Кто нибудь сталкивался с подобными проблемами ? Использовать
proxy_pass не хочется, т.к там придется в ручную вычищать
даннные из кешей.

-- 
WBR
Igor Homyakov
System Administrator, Embria


Подробная информация о списке рассылки nginx-ru