5 Описание работы
5.1 Как посмотреть системную статистику работы Squid?
В состав дистрибутива Squid входит CGI утилита cachemgr.cgi для просмотра статистики squid через браузер. Для большей информации обратитесь к разделу, посвященному cachemgr.cgi.
5.2 Что я могу узнать из log файлов?
Файлы содержат различную информацию о загрузке и производительностиe Squid. В log пишутся кроме информации о доступе, еще и системные ошибки и информация о потреблении ресурсов, таких, например, как память или дисковое пространство. Ниже описан формат log файлов Squid:
access.log, общий формат:
Host Ident — [D/M/Yr:H:M:S TZ] "Method URL" Status Size
access.log, Squid 1.0 родной формат:
Time Elapsed Host Status/HTTP/Hier_Status Size Method URL
access.log, Squid 1.1 родной формат:
Time Elapsed Host Status/HTTP Size Method URL Ident Hier_Status/Hier_Host
hierarchy.log, только Squid 1.0:
[D/M/Yr:H:M:S TZ] URL Hier_Status Hier_Host
Здесь описание формата разных компонентов log:
- Host
- IP адреса запрашиваемых хостов (в версии v1.1, если задано может быть FQDN).
- Ident
- Обычно '-'. В версии 1.1 ответ Ident (RFC 931), если задано.
- Method
- GET, HEAD, POST для TCP запросов или ICP_QUERY для UDP запросов.
- URL
- Запрашиваемый объект.
- Status
- Результат запроса (TCP_HIT для ранее кешируемых объектов, TCP_MISS если запрашиваемый объект взят не из локального кеша, UDP_HIT и UDP_MISS то же для братских запросов).
- HTTP
- Возвращаемый HTTP код: 200 для удачных, 000 для UDP запросов, 403 для перенаправлений, 500 для ошибок, и т.д.
- Size
- Количество байт переданных клиенту.
- Hier_Status
- Результат запросов к братским/родительским кешам. Может быть PARENT_MISS, SIBLING_HIT и т.д.
- Hier_Host
- Хост, с которого взят объект.
- Time
- Время с Jan 1, 1970 в миллисекундах.
- Elapsed
- Затраченное время в миллисекундах.
5.3 Какие log файлы я могу удалять?
Чтобы сохранить log файлы, лучше послать процессу squid сигнал USR1. Это приведет к тому, что текущие log файлы будут закрыты и переименованы. После этого можно удалять старые log файлы. Например,если Ваш файл squid.pid находится в/usr/local/squid/logs/squid.pid (как задано в squid.conf) надо сделать следующее:
kill -USR1 `cat /usr/local/squid/logs/squid.pid`
Примечание: Строка logfile_rotate в squid.conf делает необязательным ручное удаление старых log файлов. Просто установите значение logfile_rotate в желаемую величину. Как только значение logfile_rotate будет достигнуто, старый log будет удален автоматически. Выставите нужное значение logfile_rotate и пропишите в crontab посылку squid 'у сигнала SIGUSR1, например в полночь каждого дня:
0 0 * * * /bin/kill -USR1 `cat /usr/local/squid/logs/squid.pid`
Единственный файл, котрый нельзя удалять это log, который обычно находится в первой cache_dir директории. Этот файл содержиит данные, необходимые для восстановления кеша призапуске Squid. Удаление этого файла приведет к потере кеша.
5.4 Как мне найти самый большой объект кеша?
sort -r -n +4 -5 access.log | awk '{print $5, $7}' | head -25
5.5 Я хочу перезапустить Squid с чистым кешем
Первый способ, добавить -zв командной строке.
Другой, возможно более простой, удалить файл log из директории cache_dir.
6 Кеш-менеджер
[Contributed by Jonathan Larmour <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.>]
6.1 Что такое кеш-менеджер?
Кеш-менеджер (cachemgr.cgi) это CGI утилита для просмотра статистики работающего процесса squid. Кеш-менеджер это простой способ управления кешем и просмотра статистики без захода на сервер.
6.2 Как его установить?
Прежде всего это зависит от web сервера, который Вы используете. Ниже Вы найдете инструкции по настройке CERN и Apache серверов для пользования cachemgr.cgi.
После того как Вы изменили конфигурационные файлы сервера, нужно или перезапустить web сервер, либо послать ему SIGHUP, чтобы он пересчитал файлы настройки.
Когда Вы закончите конфигурировать web сервер, то сможете подключиться браузером к кеш-менеджеру по URL:
http://www.example.com/Squid/cgi-bin/cachemgr.cgi
6.3 Настройка CERN httpd 3.0 для работы с кеш-менеджером
Во-первых, следует убедиться, что только указанные рабочие станции имеют доступ к кеш-менеджеру. Их надо задать в CERN httpd.conf, а не в squid.conf.
Protection MGR-PROT {
Mask @(workstation.example.com)
}
Можно задавать шаблонами, IP адресами, в том числе и через запятую. Возможны и другие способы защиты. Обратитесь к документации по серверу.
Также следует добавить:
Protect /Squid/* MGR-PROT
Exec /Squid/cgi-bin/*.cgi /usr/local/squid/bin/*.cgi
чтобы отметить для MGR-PROT, что скрипт выполняемый.
6.4 Настройка Apache для работы с кеш-менеджером
Сначала убедитесь, что директория cgi-bin прописана в ScriptAlias в файле srm.confВашего Apache, как-то так:
ScriptAlias /Squid/cgi-bin/ /usr/local/squid/cgi-bin/
Не советуем делать ScriptAlias на всю директорию /usr/local/squid/binгде лежат бинарники Squid.
Затем, надо задать рабочие станции имеющие доступ к кеш-менеджеру. Это задается в файле access.conf Apache, а не в squid.conf. В конце access.conf, вставьте:
<Location /Squid/cgi-bin/cachemgr.cgi>
order deny,allow
deny from all
allow from workstation.example.com
</Location>
Можно вписать несколько строк, можно добавить домены или сети.
Также, cachemgr.cgi может быть защищен паролем. Надо добавить следующие строки в access.conf:
<Location /Squid/cgi-bin/cachemgr.cgi>
AuthUserFile /path/to/password/file
AuthGroupFile /dev/null
AuthName User/Password Required
AuthType Basic
<Limit GET>
require user cachemanager
</Location>
В документации Apache Вы найдете информацию об использовании htpasswdдля задания пароля.
6.5 Задание ACL (списка пользователей) для кеш-менеджера в squid.conf
По умолчанию доступ к кеш-менеджеру задан в squid.confтак:
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
Со следующими правами:
http_access deny manager !localhost
http_access allow all
Первая запись в ACL нужна для кеш-менеджера, так как он для опроса squid использует специальный cache_objectпротокол. Можете сами попробовать:
telnet mycache.example.com 3128
GET cache_object://mycache.example.com/info HTTP/1.0
По умолчанию, если запрос для cache_object, и запрос не с локальной машины, то доступ будет закрыт, в противном случае — открыт.
Фактически, так как доступ разрешен только с локальной машины, то в поле cachemgr.cgi можно указать в качестве кеш хоста localhost. Мы рекомендуем следующее:
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl example src 123.123.123.123/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
Где 123.123.123.123это IP адрес Вашего web сервера. Затем измените правила так:
http_access deny manager !localhost !example
http_access allow all
По умолчанию подразумевается, что web сервер находится на той же машине, что и squid. Учтите, что обращение кеш-менеджера к squid происходит через web сервер, а не браузер. Так что, если Ваш web сервер находится где-то в другом месте, IP адрес web сервера, на котором установлен cachemgr.cgi должен быть указан вместо exampleв вышеприведенном примере.
Не забывайте каждый раз после изменения squid.conf посылать SIGHUP squid'у.
6.6 Почему он спрашивает у меня какой-то пароль и URL?
Если Вы посмотрите в выпадающем списке, то увидите, что пароль нужен только для остановки кеша, а URL нужен для обновления объекта (то есть, повторного получения его с исходного сервера). Для получения информации от cachemgr.cgi пароль не требуется.
6.7 Я хочу удаленно остановить кеш. Какой пароль?
В squid.conf есть директива cachemgr_passwd.
6.8 Как сделать, чтобы в поле cache host по умолчанию было имя моего кеша?
Найдите в файле Makefile.in следующую строку:
HOST_OPT = # -DCACHEMGR_HOSTNAME="getfullhostname()"
Если web сервер с cachemgr.cgi запущен на той же машине, что и Squid просто уберите #. Если же web сервер какой-то другой, то:
HOST_OPT = -DCACHEMGR_HOSTNAME=\"mycache.example.com\"
После этих изменений следует перекомпилировать и переустановить cachemgr.cgi.
6.9 Какая разница между TCP и UDP соединениями Squid?
Браузеры и кеши используют TCP соединения для получения объектов с web серверов или кешей. UDP соединения используются когда другой кеш использует Ваш в качестве братского или родительского на предмет наличия нужного объекта. UDP соединения это ICP запросы.
6.10 Он говорит, что срок хранения кеша истечет в 1970 году!
Не волнуйтесь. Обычное (и в общем-то разумное) поведение squidэто перезаписывать объекты, срок хранения которых истек.
6.11 Что значат записи мета-данных?
- StoreEntry
- Запись описывает объект кеша.
- IPCacheEntry
- Запись в кеше DNS.
- Hash link
- Звено в структуре хэш-таблицы.
- URL strings
- Сами строки URL, указывающие на номер объекта в кеше, позволяющие обращаться к StoreEntry.
В основном похоже на log файл в директории cache:
- PoolMemObject structures
- Информация об объектах находящихся в памяти, (например, в процессе передачи).
- Pool for Request structures
- Информация о каждом запросе.
- Pool for in-memory object
- Пространство для принятых объектов.
6.12 Pool for in-memory object огромен и не становится меньше! Это что утечка памяти?
Нет. Этот пул только увеличивается. Он равен самому большому объекту когда либо кешируемому squid . Если Вы не хотите, чтобы он был такого размера, уменьшите значение cache_mem и размер объектов для gopher, http и ftp в squid.conf.
6.13 Значение поля "Total accounted" не совпадает с размером занимаемым моим squid!
Если это значение близко к упомянотуму, не волнуйтесь. Если squid занимает намного больше, возможно это утечка памяти, и все что можно делать это ждать новых патчей и время от времени перезапускать squid.
Если squid занимает гораздо меньше, чем в этом поле, будьте осторожны! Что-то не так, следует перезапустить squid.
6.14 В разделе utilization, что есть Other?
Otherэто категория, в каторую попадают объекты не попавшие ни в какую другую.
6.15 В разделе utilization, почему колонка Transfer KB/sec всегда нулевая?
Эта колонка содержит грубое приближение отношения переданных данных к полному времени работы кеша. Эти данные ненадежные и практически бесполезные.
6.16 В разделе utilization, что значит Object Count?
Число объектов данного типа, находящихся в данный момент в кеше.
6.17 В разделе utilization, что значит Max/Current/Min KB?
Это относится к увеличиваемому/текущему/уменьшаемому размеру всех объектов этого типа.
6.18 О чем раздел I/O?
Это гистограммы числа байт взятых из сети вызовом read(2). Довольно полезны для определения максимального размера буферов.
6.19 Что находится в разделе Objects?
Предупреждение: в этом разделе Ваш браузер получит список всех URL кеша и статистику о них. Он может быть очень, очень большим. Иногда он может быть больше, чем доступная Вашему клиенту память!Вероятно Вам эта информация никогда не понадобится.
6.20 Для чего раздел VM Objects?
VM Objectsэто объекты находящиеся в виртуальной памяти. Эти объекты уже скачены и находятся в памяти для быстрого доступа к ним.
6.21 Что значит AVG RTT?
Average Round Trip Time. Показывает среднее время, прошедшее от посылки ICP ping до прихода ответа.
6.22 В разделе IP cache , какая разница между hit, negative hit и miss?
HIT значит, что документ найден в кеше. MISS, что не найден. Negative hit означает, что он находился в кеше, но не существует.
6.23 Что значит содержимое раздела IP cache?
Hostname это имя, которое следует преобразовать.
Для колонки Flags:
- C
- Кеширован.
- N
- Не кеширован.
- P
- Запрос отложен для посылки.
- D
- Запрос послан и ожидается ответ.
- L
- Запись блокирована, потому что выступает в роли родителя или брата.
В колонке TTLпредставлены "Time To Live" (то есть, как долго запись в кеше действительна). (Может быть отрицательным, если срок хранения документа истек.)
Колонка N это число IP адресов, которые имеет данный hostname.
В конце строки перечислены остальные IP адреса, относящиеся к этой записи в IP cache.
6.24 Как анализировать использование памяти из данных cachemgr.cgi?
Взгляните на страницу Cache Information Вашего cachemgr.cgi.Например:
Memory usage for squid via mallinfo():
Total space in arena: 94687 KB
Ordinary blocks: 32019 KB 210034 blks
Small blocks: 44364 KB 569500 blks
Holding blocks: 0 KB 5695 blks
Free Small blocks: 6650 KB
Free Ordinary blocks: 11652 KB
Total in use: 76384 KB 81%
Total free: 18302 KB 19%
Meta Data:
StoreEntry 246043 x 64 bytes = 15377 KB
IPCacheEntry 971 x 88 bytes = 83 KB
Hash link 2 x 24 bytes = 0 KB
URL strings = 11422 KB
Pool MemObject structures 514 x 144 bytes = 72 KB ( 70 free)
Pool for Request structur 516 x 4380 bytes = 2207 KB ( 2121 free)
Pool for in-memory object 6200 x 4096 bytes = 24800 KB ( 22888 free)
Pool for disk I/O 242 x 8192 bytes = 1936 KB ( 1888 free)
Miscellaneous = 2600 KB
total Accounted = 58499 KB
В первой строке mallinfo() сообщает, что используетсяr 94M. Это значение близко к тому, что показывает top(97M).
Из этих 94M, 81% (76M) реально используется в этот момент. Остальное высвобождено, или зарезервировано malloc(3) и пока не используется.
Из 76M используемых, можно рассчитывать на 58.5M (76%). Остальное отведено под вызовы malloc(3).
Список Meta Data содержит информацию о том, куда потрачена доступная память. 45% ушло на StoreEntry и хранение URL строк. Другие 42% потрачены на хранение объектов в виртуальной памяти, пока они доставляются клиентам (Pool for in-memory object).
Размеры пула задаются в squid.conf. В версии 1.0, они несколько туповатые: там хранится стек неиспользованных страниц, вместо того чтобы освобождать этот блок. В Pool for in-memory object, размер этого стека составляет 1/2 cache_mem. Размер Pool for disk I/O жестко задан в 200. Для MemObject и Request это 1/8 величины FD_SETSIZE.
Если Вам нужно снизить количество памяти процесса, мы рекомендуем уменьшить максимальные размеры объектов в строках 'http', 'ftp' и 'gopher' конфигурации. Также можно уменьшить cache_mem. Но если сделать cache_mem слишком маленьким, то некоторые объекты могут не сохраняться на диск при большой загрузке. Новые версии Squid позволяют задать memory_pools off отключая таким образом пул свободной памяти.
6.25 Что такое fqdncache и чем отличается от ipcache?
IPCache содержит данные о преобразовании Hostname в IP-Number, а FQDNCache содержит обратные данные.
Например:
==============================================================================
IP Cache Contents:
Hostname Flags lstref TTL N [IP-Number]
gorn.cc.fh-lippe.de C 0 21581 1 193.16.112.73
lagrange.uni-paderborn.de C 6 21594 1 131.234.128.245
www.altavista.digital.com C 10 21299 4 204.123.2.75 204.74.103.37 204.123.2.66 204.123.2.69
2/ftp.symantec.com DL 1583 -772855 0
Flags: C --> В кеше
D --> Отправлен
N --> Не кеширован
L --> Блокирован
lstref: Время с момента последнего использования
TTL: Time-To-Live (время жизни) пока не истечет срок хранения информации
N: Число адресов
==============================================================================
FQDN Cache Contents:
IP-Number Flags TTL(?) N Hostname]
130.149.17.15 C -45570 1 andele.cs.tu-berlin.de
194.77.122.18 C -58133 1 komet.teuto.de
206.155.117.51 N -73747 0
Flags: C --> В кеше
D --> Отправлен
N --> Не кеширован
L --> Блокирован
TTL: Time-To-Live
N: Число имен
7 Troubleshooting
7.1 Почему у меня нет доступа к прокси: "Proxy Access Denied"?
Если squidработает в режиме httpd-ускорителя, то все HTTP запросы он перенаправляет на HTTP сервер, но не работает как прокси. Если Вы хотите, чтобы Ваш кеш также отрабатывал прокси-HTTP запросы, надо сделать следующее:
http_accel_with_proxy on
Также, возможно Вы неправильно задали ACL. Проверьте файлы access.log и squid.conf.
7.2 Не работает local_domain.
Squid кеширует объекты из локального домена.
Директива local_domain не запрещает кешировать локальные объекты. Она предотвращает использование братских кешей для локальных объектов. Если Вам все таки это нужно, то воспользуйтесь опциями cache_stoplist или http_stop (в зависимости от версии).
7.3 Когда кеш пытается получить объект с братского кеша, получает Connection Refused, даже когда тот кеш считает, что объект получен успешно.
Если ICP порт верный, а HTTP порт-нет, то ICP запросы будут посылаться нормально, а ICP ответы заставят кеш думать, что все в порядке, но сами объекты будут пропадать. Если братский кеш измениит свой http_port, то у Вас будут те же проблемы некоторое время до уведомления.
7.4 Не хватает файловых дескрипторов
Это бывает, когда появляется сообщение Too many open files. Возможно из-за операционной системы с низким числом файловых дескрипторов. Этот предел обычно можно задать в ядре или при помощи других средств. Существует два пути исчерпать лимит файловых дескрипторов: первый, это лимит на каждый процесс, второй — на общее число дескрипторов на все процессы.
Для Linux, есть патч filehandle.patch.linux от Michael O'Reilly Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра..
Для Solaris, добавьте следующее в файл /etc/system:
set rlim_fd_max = 4096
set rlim_fd_cur = 1024
Также следует задать #define SQUID_FD_SETSIZE в include/config.h в то же значение, что и rlim_fd_max. Не следует задавать меньше 4096.
Solaris select(2) позволяет задать только 1024 дескриптора, если надо больше отредактируйте src/Makefile и разрешите $(USE_POLL_OPT). Потом пересоберите squid.
Для FreeBSD (от Torsten Sturm <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.>):
- Как узнать максимальное значение файловых дескрипторов?
- По команде sysctl -a значение kern.maxfilesperproc.
- Как их увеличить?
- sysctl -w kern.maxfiles=XXXX
sysctl -w kern.maxfilesperproc=XXXX
Внимание:
Увеличивая значения, учитывайте соотношение
maxfiles > maxfilesperproc
.- Какой верхний предел?
- Я не думаю, что есть формальное ограничение внутри ядра. Ведь структуры под данные выделяются динамически. На практике же, могут возникать непонятные явления (например, ядро будет тратить слишком много времени на поиск в таблицах).
Для большинства BSD-систем (SunOS, 4.4BSD, OpenBSD, FreeBSD, NetBSD, BSD/OS, 386BSD, Ultrix) можно решить задачу "в лоб" (требуется пересборка ядра):
- Как узнать максимальное значение файловых дескрипторов?
- По команде pstat -T значение files, обычно отображаемое как отношение current/maximum.
- Как увеличить это значение?
- Первый метод — увеличить значение переменной maxusers в конфигурации ядра и пересобрать его. Это очень быстрый и простой метод, но приводит к увеличению ряда других переменных, менять которые Вам может и не надо.
- А существует более точный способ?
- Найти файл param.c в исходниках ядра и изменить соотношение между maxusers и максимальным числом открытых файлов по нижеприведенным выражениям.
Вот несколько примеров:
- SunOS
- Измените значение nfile в /usr/kvm/sys/conf.common/param.c меняя значения в этом выражении:
int nfile = 16 * (NPROC + 16 + MAXUSERS) / 10 + 64;
Где
NPROC
определяется как:
#define NPROC (10 + 16 * MAXUSERS)
- 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
- 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,
чтобы изменить ограничение числа дескрипторов на процесс.
Замечание:После пересборки ядра необходимо откомпилировать заново Squid. Конфигурационный скрипт Squid'а определяет сколько файловых дескрипторов доступно, так что надо запустить скрипт заново. Например:
cd squid-1.1.x
make realclean
./configure --prefix=/usr/local/squid
make
7.5 Мой squid периодически вываливается с ошибкой, что не может malloc(3) больше памяти, но у меня достаточно ОЗУ!
Кроме ограничения на число файловых дескрипторов, многие системы имеют ограничение на количество памяти, выделяемое процессу, в особенности не-root процессам. BSD/OS имеет довольно низкий предел, который Вы можете увеличить. Измените файл конфигурации ядра, добавив эти строки:
options DFLDSIZ=67108864 # 64 meg default max data size (was 16)
options MAXDSIZ=134217728 # 128 meg max data size (was 64)
Пересоберите ядро и перезагрузите машину.
В Digital UNIX, отредактируйте файл /etc/sysconfigtab и добавьте строку…
proc:
per-proc-data-size=1073741824
Или, в csh, используя команду limit …
zpoprp.zpo.dec.com> limit datasize 1024M
Редактирование /etc/sysconfigtab требует перезагрузки, а команда limit - нет.
7.6 Что за странные строки об удалении объектов?
Например:
97/01/23 22:31:10| Removed 1 of 9 objects from bucket 3913
97/01/23 22:33:10| Removed 1 of 5 objects from bucket 4315
97/01/23 22:35:40| Removed 1 of 14 objects from bucket 6391
Обычные строки log файла, но они не значат, что squid достиг cache_swap_high.
На странице cache information вcachemgr.cgi найдите строку типа этой:
Storage LRU Expiration Age: 364.01 days
Объекты, которые не использовались данное количество времени, удаляются как результат регулярных работ. Вы можете задать собственное значение LRU Expiration Age при помощи reference_ageв конфигурационном файле.
7.7 Почему я не могу задать cache_effective_user в nobody под Linux?
Несколько пользователей сообщали, что они не могут задать cache_effective_user в nobodyпод Linux и сервер сообщает:
FATAL: Don't run Squid as root, set 'cache_effective_user'!
Однако, если установить cache_effective_user не в nobody, то все ОК. Первое решение, это создать пользователя для Squid и установить для него cache_effective_user.
Также можно поменять UID nobody с 65535 на 65534.
7.8 Могу я указать Windows NT FTP серверу выводить директории в Unix формате?
Почему бы и нет! Выберите следующие пункты меню:
- Start
- Programs
- Microsoft Internet Server (Common)
- Internet Service Manager
Дважды щелкните на ftp.
Дальше надо выбрать сервер (должен быть только один), потом выберите "Properties" из меню, закладку "directories", будет опция "Directory listing style." Выберите "Unix" type, а не "MS-DOS" type.
--Oskar Pearson <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.>
7.9 Почему так часто появляются сообщения ERR_NO_CLIENTS_BIG_OBJ?
Это значит, что запрашиваемый объект находился в режиме "Удалить позже" и пользователь отказался от передачи. Объект попадет в режим "Удалить позже" если он:
- больше, чем maximum_object_size
- доставлен с соседнего кеша, у которого установлена опция proxy-only.
7.10 Почему Squid требует так много памяти!?
Squid потому такой быстрый и может обрабатывать одновременно несколько запросов, что использует много памяти. Для начала, просмотрите эти разделы FAQ:
Также можно повысить производительность линкуя Squid с внешней malloc библиотекой. Мы рекомендуем:
- GNU Malloc, доступной на ftp://ftp.gnu.ai.mit.edu/pub/gnu/malloc.tar.gz. Проверка на 'libgnumalloc.a' включена в конфигурационный скрипт Squid'а. Если libgnumalloc.a найдена, то автоматически подлинковывается.
7.11 Почему я получаю "Ignoring MISS from non-peer x.x.x.x"?
Вы получаете ICP MISS (через UDP) с родительского или братского кеша, чей IP адрес Вашему кешу не известен. Это может быть в двух случаях.
(1) Если на том конце несколько интерфейсов и пакеты идут с того, который не прописан в DNS. Вообще-то, это их проблема. Вы можете сказать им или прописать IP адрес интерфейса в DNS, или использовать опцию Squid 'udp_outgoing_address'.
Например:
# (squid.conf родительского кеша)
#
udp_outgoing_address proxy.parent.com
# (Ваш squid.conf)
#
cache_host proxy.parent.com parent 3128 3130
(2) Также это сообщение будет появляться при посылке ICP запросов на несколько адресов. Для обеспечения безопасности, Squid требует задания в конфигурации списка других кешей, слушающих группу адресов. Если неизвестный кеш слушает этот адрес и шлет ответы, ваш кеш будет писать в log эти сообщения. Чтобы исправить надо, либо сказать этому кешу перестать слушать адреса, или, если он законный, добавьте его в файл конфигурации.
8 Как Squid работает?
8.1 Какие объекты кешируются?
Объекты Internet такие как файл, документ, или ответ на запрос следующих сервисов: FTP, HTTP, или gopher. Клиент запрашивает объект Internet с кеширующего прокси, прокси сервер получает объект (либо с хоста, указанного в URL, либо с родительского или братского кеша), переправляя его клиенту.
8.2 Что за протокол ICP?
ICP это протокол используемый для общения кешей squid. ICP протокол описан в Internet Cache Protocol, 2 проекте документа, находящемся по адресу http://www.nlanr.net/Cache/ICP/ICP-id.txt.
ICP прежде всего используется в иерархии кешей для поиска определенных объектов в братских кешах. Если squid не находит нужного документа, то посылает ICP запрос братским кешам, которые в свою очередь отвечают ICP ответами "HIT" ("попадание") или "MISS" ("промах"). Затем кеш использует ответы для выбора при помощи какого кеша разрешать свои ответы MISS.
ICP также поддерживает сложные передачи множества объектов через одно TCP соединение. ICP сейчас работает поверх UDP. Текущие версии Squid также поддерживают множественные запросы ICP.
8.3 Что такое dnsserver?
Dnsserver это процесс инициируемый squid для преобразования доменных имен в IP адреса. Необходимость возникает из-за того, что функция gethostbyname(3)блокирует вызывающий процесс до зазрешения DNS запроса.
У Squid не должен блокироваться процесс ввода/вывода, поэтому DNS обращения выполнены как внешний к основному процесс. Процессы dnsserver не кешируют запросы DNS, это делается самим squid`ом.
8.4 Для чего нужна программftpget?
Программа ftpget это FTP клиент, использующийся для скачивания файлов с FTP серверов. Из-за того, что FTP протокол непростой, проще выполнить его отдельно от основного кода squid.
8.5 FTP PUT не работает
Похоже,что FTP put не работает через squid. Можно ли как-нибудь это исправить и/или ведется ли какая-нибудь работа в этом направлении.
На данный момент нет, для поддержки этого нужна будет программа ftpput.
8.6 Что такое иерархия кешей? Что такое родительские и братские кеши?
Иерархия кешей это структура кеширующих прокси-серверов расположенных логически как родительский/дочерний и братский узлы, таким образом, что кеши ближайшие к каналу в Internet являются родителями тем, которые находятся дальше от точки входа в Internet. Родительские кеши обрабатывают "промахи" дочерних. Иначе говоря, когда кеш запрашивает объект с родителя, и у того в кеше его не оказывается, родительский кеш скачивает объект, кеширует его, и передает дочернему. Таким образом, при помощи иерархии достигается максимальная разгрузка канала, снижается использование внешних серверов Internet и получается большее число "попаданий" дочерних кешей, по сравнению с родительскими, за счет большего кеша последних.
Кроме родительских/дочерних отношений, squid поддерживает понятие братских кешей, то есть находящихся на одном уровне иерархии, призванных распределить нагрузку. Каждый кеш в иерархии независимо ни от кого решает откуда брать объект, либо с сервера в Internet, либо с родительского или братского кеша, используя простой механизм разрешения. Братские кеши не будут забирать объект для другого кеша того же уровня, получив от них "промах".
8.7 Каков алгоритм разрешения кеша Squid?
- Разослать ICP запросы всем соответствующим братским кешам
- Дождаться всех ответов, пришедших в течение заданного времени (по умолчанию две секунды).
- Получив первый ответ HIT начать скачивание объекта , или
- Взять объект с первого родительского кеша, ответившего MISS (зависит от весовых коэффициентов), или
- Забрать объект из Internet
Алгоритм становится отчасти более сложным при включении в схему брандмауэра.
Директива single_parent_bypass предотвращает рассылку ICP запросов, в случае когда соответствующий братский кеш это родительский (то есть, если больше неоткуда брать объект, зачем напрасно запрашивать?)
8.8 Над какими возможностями Squid разработчики сейчас работают?
Есть несколько открытых проектов касающихся лучшего автоматического выравнивания нагрузки, также (динамического и статического) выбора родительских кешей, роутинга, множественных кеш-кеш обращений и лучшего распознавания URL, которые не надо кешировать.
Текущий список будущих возможностей, доступен здесь http://squid.nlanr.net/Squid/Devel/todo.html.
Разработчикам будущих версий следует обратиться сюда http://squid.nlanr.net/Squid/Devel/.
8.9 Где найти информацию о загрузке Internet трафика
Загрузку можно охарактеризовать как тяжесть возлагаемая пользователем или группой пользователей на систему. Понимание природы загрузки очень важно при управлении производительностью системы. Если Вы интересуетесь загрузкой Internet трафика, то для начала сходите сюда http://www.nlanr.net/NA/.
8.10 Какие преимущества кеширования совместно с кеширующей системой NLANR?
Преимущества иерархического кеширования заключаются в снижении загрузки канала, уменьшении времени доступа, лучшей устойчивости к сбоям. Кеши верхнего уровня обслуживают запросы нижестоящих..Если средний процент попадания краевого кеша 50%, половина всех ссылок краевых кешей должна обрабатываться через кеш второго уровня, нежели напрямую с исходного хоста. Если этот кеш второго уровня содержит большинство запрашиваемых документов, то выигрыш достигается, но если кеш верхнего уровня чаще всего не имеет нужный документ, или перегружен, то время доступа вместо снижения увеличивается.
8.11 Где найти информацию по брандмауэрам?
Смотрите список рассылки и FAQ здесь http://www.greatcircle.com/firewalls/