Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
squid.doc
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
1.45 Mб
Скачать

10.25 Я хочу видеть локальную временную зону в сообщениях о ошибке

По умолчанию Squid использует временную метку в GMT для всех генерируемых сообщений о ошибках. Это опозволяет кешу состоять в иерархии кешей из различных временных зон без риска запутаться в определении времени.

Чтобы изменить временную метку в генерируемых Squid сообщениях о ошибке, вам необходимо изменить подпись Squid. См. Пользовательские осообщения о ошибках. В подписи по умолчанию временная метка указана как %T, но если вам хочется использовать локальную временную зону во временной метке, вы можете указать взамен этого параметр %t.

11. Решение проблем

11.1 Почему я получаю ``Proxy Access Denied?''

Возможно вам необходимо установить опцию http_access, чтобы разрешить запросы в вашего IP-адреса. Загляните в секцию Контроль доступа для более детальной информации.

Если squid работает в режиме httpd-акселератора, он будет принимать принятые обычные HTTP-запросы HTTP-серверу, но это не коснется запросов прокси. Если вы хотите, чтобы также принимал запросы proxy-HTTP, вы должны воспользоваться директивой:

httpd_accel_with_proxy on

Другой причиной может быть неверно описанный вами ACL. Проверьте файлы access.log и squid.conf, чтобы найти причину.

11.2 Я не могу заставить работать local_domain.Squidкеширует объекты с моих локальных серверов.

Директива local_domain не предохраняет локальные объекты от кеширования. Она предотвращает от использования сиблинга при получении локальных объектов. Если вы хотите избежать кеширования локальных объектов, используйте конфигурационные опции cache_stoplist или http_stop (в зависимости от версии).

11.3 Я получаю Connection Refused, когда кеш пытается получить объект с братского кеша (sibling), хотя братский кеш считает, что он отдал объект моему кешу.

Если HTTP-порт указан неверно, но ICP-порт указан правильно, то вы будете посылать корректные ICP-запросы и ICP-ответы будут заставлять ваш кеш считать, что настройки верны, но доставка больших объектов будет терпеть неудачу до тех пор, пока вы не установите верное значение HTTP-порта для братского кеша в вашем файле squid.conf. Если ваш братский кеш изменил свой http_port, то подобная проблема некоторое время может у вас быть, пока вы ее не заметите.

11.4 Кончаются файловые дескрипторы.

Если вы видите сообщение о ошибке Too many open files, то скорее всего у вас закончились файловые дескрипторы. Возмозжно это вызвано тем, что Squid запущен на ОС с небольшим лимитом файловых дескрипторов. Зачастую этот лимит можно указать, перестроив ядро или при помощи других отладочных инструментов системы. Есть две причины по которым кончаются файловые дескрипторы: первая - вы возможно достигли лимита файловых дескрипторов на отдельный процесс. Вторая - вы возможно достигли системного лимита общего кол-ва файловых дескрипторов для всех процессов.

Linux

У Dancer есть страница Mini-'Adding File-descriptors-to-linux for squid' HOWTO, но эта информация специфична и предназначана для ядра Linux 2.0.36.

У Henrik есть страница How to get many filedescriptors on Linux 2.2.X.

Также вы возможно захотите взлянуть на filehandle patch от Michael O'Reilly

Если у вас ядро версии 2.2.x или более поздней, то вы можете посмотеть и изменить максимальное число поддерживаемых файлов и/или инод, просто имея доступ к специальным файлам:

/proc/sys/fs/file-max

/proc/sys/fs/inode-max

Чтобы увеличить лимит для файловых дескрипторов:

echo 3072 > /proc/sys/fs/file-max

Если у вас ядро версией между 2.0.35 и 2.1.x (?),то вы можете посмотеть и изменить максимальное число поддерживаемых файлов и/или инод, просто имея доступ к специальным файлам:

/proc/sys/kernel/file-max

/proc/sys/kernel/inode-max

Т.к. это увеличило текущее значение количества файловых дескрипторов, то Squid-овый скрипт configure скорее всего не покажет новое значение, пока вы также не обновите заголовочные файлы , указав значение OPEN_MAX в файле /usr/include/linux/limits.h.

Solaris

Чтобы увеличить максимальное количество файловых дескрипторов на процесс, добавьте следующее в ваш файл /etc/system:

set rlim_fd_max = 4096

Далее вам необходимо перезапустить скрипт configure в корневой директории, чтобы он подхватил новое значение. Если скрипт не найдет новый лимит, то вы можете попытаться установить вручную #define DEFAULT_FD_SETSIZE, отредактировав файл include/autoconf.h. Заметьте, что файл include/autoconf.h создается из autoconf.h.in каждый раз, когда вы запускаете configure. Т.е., если вы редактируете вручную, то ваши изменения могут быть впоследстии утрачены.

Если у вас очень старая версия Squid (1.1.X) и вы хотите использовать более чем 1024 файловых дексриптора, то вы должны отредактировать src/Makefile и включить $(USE_POLL_OPT). После этого перекомпилируйте squid.

Jens-S. Voeckler предупреждает, что вы НЕ должны изменять "мягкий" лимит (rlim_fd_cur) на что-нибудь большее, чем 256. Это может нарушить работу остальных программ, к примеру, менеджера лицензий для компилятора SUN. Jens-S.также говорит, что возможно не беспокоясь задрать лимит до 16,384.

IRIX

За подсказками обратитесь к документу Tuning IRIX 6.2 for a Web Server от SGI.

FreeBSD

от Torsten Sturm

  1. Ка проверить максимальное значение для файловых дексрипторов?

Запустите sysctl -a и найдите значение переменной kern.maxfilesperproc.

  1. Как его увеличить?

  2. sysctl -w kern.maxfiles=XXXX

  3. sysctl -w kern.maxfilesperproc=XXXX

Предупреждение: Вы возможно захотите сделать maxfiles > maxfilesperproc, ексли собираетесь поднть лимит.

  1. А как насчет верхнего лимита?

Я не думаю, что есть формальный верхний предел внутри самого ядра. Все структуры данных выделяются динамически. На практике возможно мог быть случайный metaphenomena (ядро, тратящее kслишком много времени на поиск таблиц, к примеру).

General BSD

Для большинства BSD-систем (SunOS, 4.4BSD, OpenBSD, FreeBSD, NetBSD, BSD/OS, 386BSD, Ultrix) вы можете также использовать метод ``грубой силы'', что бы увеличить эти значение в ядре (требуется пересборка ядра):

  1. Как мне проверить максимальное кол-ва файловых дескрипторов?

Выполните pstat -T и посмотрите на значение files, обычно отображается ввиде отношения current/maximum.

  1. Как мне проще всего увеличить это значение ?

Один из способов - увеличить значение переменной maxusers в файле конфигурации вашего ядра, а затем собюрать новое ядро. Это метод быстрый легкий, но от также увеличит значение широкого спектра других переменных, которые у вас нет ни ниобходимости, ни желания увеличивать.

  1. Есть ли более точный метод?

Другая возможность - найти файл param.c в исходниках вашего ядра и изменить арифметические зависомости между maxusers и максимальным количеством открытых файлов.

Вот несколько примеров, которые укажут вам нужное направление движения:

  1. SunOS

Измените значение nfile в usr/kvm/sys/conf.common/param.c> поправив данную формулу:

int nfile = 16 * (NPROC + 16 + MAXUSERS) / 10 + 64;

Где NPROC поределяется как:

#define NPROC (10 + 16 * MAXUSERS)

  1. FreeBSD (начиная 2.1.6)

Подобно SunOS, отредактируйте /usr/src/sys/conf/param.c и поправьте соотношение между переменными maxusers,maxfiles и maxfilesperproc:

int maxfiles = NPROC*2;

int maxfilesperproc = NPROC*2;

Где NPROC определяется как: #define NPROC (20 + 16 * MAXUSERS) Лимит для каждого процесса также может быть подстроен прямо в файле конфигурации ядра при помощи следующей директивы: options OPEN_MAX=128

  1. BSD/OS (начиная с 2.1)

Отредактируйте /usr/src/sys/conf/param.c и поправьте maxfiles согласно формуле:

int maxfiles = 3 * (NPROC + MAXUSERS) + 80;

Где NPROC определяется как: #define NPROC (20 + 16 * MAXUSERS) Вы можете также установить значение OPEN_MAXв файле конфигурации вашего ядра для изменения лимита на каждый процесс.

Reconfigure afterwards

Замечание: После пересборки вашего ядра с большим количеством файловых дексрипторов, вам необходимо пересобрать Squid. Squidвый скрипт configure определяет как мноо файловых дескрипторов доступно, поэтому вы должны убедится что скрипт был запущен еще раз, к примеру:

cd squid-1.1.x

make realclean

./configure --prefix=/usr/local/squid

make

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]