стоверьтесь, что
на рабочих станциях прописаны локальные DNS сервера.
Если на брандмауэре или прокси сервере работает DNS сервер (что является
хорошей идеей IMHO) пусть рабочие станции используют его.
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 <JLarmour@origin-at.co.uk>]
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 <michael@metal.iinet.net.au>.
Для 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 <torsten.sturm@axis.de>):
-
Как узнать максимальное значение файловых дескрипторов?
-
По команде 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 <oskar@is.co.za>
7.9 Почему так часто появляются сообщения ERR_NO_CLIENTS_BIG_OBJ?
Это значит, что запрашиваемый объект находился в режиме "Удалить позже"
и пользователь отказался от передачи. Объект попадет в режим "Удалить позже"
если он:
-
больше, чем maximum_object_size
-
доставлен с соседнего кеша, у которого установлена опция proxy-only.
7.10 Почему Squid требует так много памяти!?
Squid потому такой быстрый и может обрабатывать одновременно несколько
запросов, что использует много памяти. Для начала, просмотрите эти разделы
FAQ:
Также можно повысить производительность линкуя Squid с внешней malloc библиотекой.
Мы рекомендуем:
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/љ
$Id: footer,v 1.3 1997/03/13 16:19:52 wessels Exp $