BUG? nginx 0.8.1, caching

Igor Sysoev is at rambler-co.ru
Mon Jun 15 09:39:54 MSD 2009


On Mon, Jun 15, 2009 at 03:30:49AM +0300, Denys Fedoryschenko wrote:

> nginx 0.8.1
> Платформа x86 (32-bit), Gentoo Linux 2.6.30
> 
> Использую nginx как кеш (сквид в некотором плане неэффективен, больше кушает памяти на каждый обьект).
> Заметил, что если юзеры тянут один и тот же файл, он появляется в /cache/temp дважды, т.е. и тянется похоже дважды.
> 
> Например файлы
> www.nuclearcat.com/files/file1.bin
> www.nuclearcat.com/files/file2.bin
> Оригинальные имена файлов были: 0000000331  и 0000000371
> 
> Отличаются они только бинарной строкой (ключ? т.к. 128 бит), но отличаются достаточно странно в этой части, т.к. md5 вроде как не так предсказуем (т.е. меняется обычно весь и закономерностей не прослеживается)
> , и http заголовком Date.
> 
> См.
> 00000000 FD 8A 5D 4A │ 84 85 DE 49 │ FD FD 35 4A │ C4 0B D5 46 │ 00 00 AC 00 │ 30 02 21 3C │ 0A 4B 45 59 │ 3A 20 68 74 │ 74 70 2F 2F │ 64 6F 77 6E               ??.]J..??I????5J??.??F..??.0.!<.KEY: http//down
> 00000000 F7 8A 5D 4A │ 84 85 DE 49 │ F7 FD 35 4A │ C4 0B D5 46 │ 00 00 AC 00 │ 30 02 B4 09 │ 0A 4B 45 59 │ 3A 20 68 74 │ 74 70 2F 2F │ 64 6F 77 6E               ÷.]J..??I÷??5J??.??F..??.0.??..KEY: http//down

Нет, md5 - это имя файла в кэше, считается от KEY:.
А в начале файла служебная информация - expires, начало ответа, длина заголвка
и прочее.

> Кстати, в письме Игоря Сысоева видел такое:
> >Each key takes 128 bytes in shared memory zone. Therefore you need 6.1G zone:
> Почему 128 байт? Вроде как ключ 128 бит, т.е. 16 байт. Или это из-за хешей для поиска?

Потому что помимо самого md5 ключа в зоне хранится информация о закэшированом
файле, и кроме того, указатели в дереве и в очереди. Ну и потом объём
выравнивается до степени двойки - так устроен аллокатор.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list