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

11.15 Опция default parent не работает!

Это сообщение получено из squid-bugs:

Если у вас только один родительский кеш, сконфигурированный как:

cache_host xxxx parent 3128 3130 no-query default

ничего не посылается к родительскому прокси ни UDP пакеты, ни TCP.

Простое добавление опции default к свойствам родительского кеша не принуждает все запросы проходить через него. Термин default возможно не совсем точно подобранное слово. Терминdefault в данном случае значит, что родительский прокси будет использоваться как последний источник. Если кеш может установить прямое соединение, то он одаст ему предпочтение перед роделем по умолчанию. Если вы хотите принудительно пропустить все запросы через ваш родительский прокси по умолчанию, используйте опцию never_direct:

acl all src 0.0.0.0/0.0.0.0

never_direct allow all

11.16 ``Hot Mail'' complains about: Intrusion Logged. Access denied.

``Hot Mail'' не больно дружественен по отношению к прокси и требует, чтобы все запросы приходили с одного IP-адреса. Вы можете исправить это, добавив в ваш squid.conf:

hierarchy_stoplist hotmail.com

11.17 Мой Squid становиться слишком медленным после того, как проработает некоторое время.

Скорее всего это из-за того, что Squid использует памяти больше, чем это должно быть для вашей системы. Когда процесс Squid разростается, it experiences a lot of paging. Это очень быстро приведет к снижению качества работы Squid. Использование памяти - это серьезная проблема. There are a number of things to consider.

Прежде всего проверьте, что отдает вам Cache Manager в разделе Info и обратите внимание эти две строки:

Number of HTTP requests received: 121104

Page faults with physical i/o: 16720

Заметьте, что если ваша система не имеет функции getrusage(), то вы не увидите строки page faults.

Разделите число page faults на кол-во соединений. В данном случае это 16720/121104 = 0.14. В идеале это значение должно быть в пределах 0.0 - 0.1. Приемлемо также значение из диапазона 0.1 - 0.2 . Если больше, то вы возможно обнаружили почему Squid работает недопустимо медленно.

Если отношение слишком велико, товам необходимо сделать некторые изменения, чтобы уменьшить кол-во используемой Squid-ом памяти.

11.18 Warning: Failed to start 'dnsserver'

Это означает промбелу с правами. А Squid userid имеет права на запуск программы dnsserver?

Вы также можете протестировать работу dnsserver из командной строки:

> echo oceana.nlanr.net | ./dnsserver

Это вернет примерно следующее:

$name oceana.nlanr.net

$h_name oceana.nlanr.net

$h_len 4

$ipcount 1

132.249.40.200

$aliascount 0

$ttl 82067

$end

11.19 Как послать отчет о ошибке в Squid

Отчет о ошибке в Squid должен быть соплан по адресу squid-bugs alias. Любой отчет о ошибке дожен содержать:

  • Версию Squid

  • Тип ваше ОС и ее версию

crashes and core dumps

Есть два условия, при которых squid аварийно завершит работу и сгенериует coredump. Прежде всего это сигнал SIGSEGV или SIGBUS по причине которого Squid завержит работу и оставит dump core. Во-вторых, многие функции включают проверку последовательностей. Если одна из этих проверок закончилась неудачно, то Squid вызывает abort() для генерации core dump.

Многие люди сообщают о том, что Squid не оставляет coredump вообще. Это может быть вызвано следующими причинами:

  • Лимиты ресурсов. Ваш шел имеет органичение на размер файла coredump. Вам необходимо увелечить этот лимит.

  • Опции sysctl. На FreeBSD вы не сможете получить coredump от программ, вызываемых по setuid() и/или setgid() (как делает иногда Squid) пока вы не включите эту опцию:

  • # sysctl -w kern.sugid_coredump=1

  • Нет отладочных символов. Бинарник Squid должен содержать отладочные символы для того, чтобы получить нормальный coredump.

  • Треды и Linux. На Linux, приложения использующие треды на генерируют coredump-ов. Когда вы используете --enable-async-io, то используются треды и вы не можете получить coredump.

  • Приложение оставило файл coredump, вы посто не можете его найти.

Лимиты ресурсов: Эти лимиты могут быть зименены в shell-скрипте. Команда изменения лмитов ресурсов обычно называется limit или limits. Иногда это встроенная функция оболочки, а иногда это обычная программа. Также обратите внимание, что вы можете установить лимиты ресурсов в файле /etc/login.conf на FreeBSD и возможно на других BSD-системах.

Чтобы изменить лимит размера coredump, моете использовать команду типа:

limit coredumpsize unlimited

или

limits coredump unlimited

Отладочные символы: Чтобы посмотреть содержит ли бинарник Squid оталдочные символы, используйте команду:

% nm /usr/local/squid/bin/squid | head

Бинарный файл содержит отладочные символы, если вы видите что-то типа этого:

0812abec B AS_tree_head

080a7540 D AclMatchedName

080a73fc D ActionTable

080908a4 r B_BYTES_STR

080908bc r B_GBYTES_STR

080908ac r B_KBYTES_STR

080908b4 r B_MBYTES_STR

080a7550 D Biggest_FD

08097c0c R CacheDigestHashFuncCount

08098f00 r CcAttrs

Отладочные символы отсутствуюет, если взамен этого в видите:

/usr/local/squid/bin/squid: no symbols

Отладочные символы могут быть удалены вашей программой install. Если вы посмотрите на бинарник squid в директории с исходниками, то он может содержать отладочные символы.

Расположение Coredump: Файл coredump может быть оставлен в одном из следующих мест:

  1. В директории coredump_dir, если вы установили эту опцию.

  2. В первой директории cache_dir. если вы использовали опцию cache_effective_user option.

  3. В текущей на момент старта Squid директории

Ранние версии Squid сообщали о текущей директории после старта, это выглядело так:

2000/03/14 00:12:36| Set Current Directory to /usr/local/squid/cache

Если вы не можете найте файл core, то возможно также, что Squid не имеет прав, чтобы записать это т файл в текущую директорию,или, возможно, ваш лимит оболочки (csh и клонов) предотвращает запись файла core.

Зачастую вы можете получить файл coredump, если запустите Squid из командной строки, примерно так:

% limit core un

% /usr/local/squid/bin/squid -NCd1

Как только вы определили местонахождение файла core dump, используйте отладчик типа dbx или gdb для генерации слепка стека:

tirana-wessels squid/src 270% gdb squid /T2/Cache/core

GDB is free software and you are welcome to distribute copies of it

under certain conditions; type "show copying" to see the conditions.

There is absolutely no warranty for GDB; type "show warranty" for details.

GDB 4.15.1 (hppa1.0-hp-hpux10.10), Copyright 1995 Free Software Foundation, Inc...

Core was generated by `squid'.

Program terminated with signal 6, Aborted.

[...]

(gdb) where

#0 0xc01277a8 in _kill ()

#1 0xc00b2944 in _raise ()

#2 0xc007bb08 in abort ()

#3 0x53f5c in __eprintf (string=0x7b037048 "", expression=0x5f <Address 0x5f out of bounds>, line=8, filename=0x6b <Address 0x6b out of bounds>)

#4 0x29828 in fd_open (fd=10918, type=3221514150, desc=0x95e4 "HTTP Request") at fd.c:71

#5 0x24f40 in comm_accept (fd=2063838200, peer=0x7b0390b0, me=0x6b) at comm.c:574

#6 0x23874 in httpAccept (sock=33, notused=0xc00467a6) at client_side.c:1691

#7 0x25510 in comm_select_incoming () at comm.c:784

#8 0x25954 in comm_select (sec=29) at comm.c:1052

#9 0x3b04c in main (argc=1073745368, argv=0x40000dd8) at main.c:671

Если возможно, храните у себя файл coredump день или два. Часто это оказывается полезным, если мы спросим вас послать дополнительную отладочную информацию, типа содержимого некоторых переменных.

Если вы НЕ МОЖЕТЕ заставить Squid оставлять файл core для вас, то тогда может быть использован одмн из следующих подходов.

Первая альтернатива состоит в запуске Squid под контролем GDB

% gdb /path/to/squid

handle SIGPIPE pass nostop noprint

run -DNYCd3

[wait for crash]

backtrace

quit

Недостаток описанного выше в том, что это в действительности неприменимо на производственных системах, когда Squid не может автоматически рестартануть, если он упал. Хорошая новость состоит в том, что есть возможность полностью автоматизировать способ, описанный выше, чтобы получить stack trace и потом перезапустить Squid. Вот неббольшой скрипт автоматизирующий это, который должен работать:

#!/bin/sh

trap "rm -f $$.gdb" 0

cat <<EOF >$$.gdb

handle SIGPIPE pass nostop noprint

run -DNYCd3

backtrace

quit

EOF

while sleep 2; do

gdb -x $$.gdb /path/to/squid 2>&1 | tee -a squid.out

done

Другие возможности, если описанное выше не может быть сделано:

a) Собрать Squid с ключем --enable-stacktraces, если сущестсвует поддержка для вашей ОС (есть для Linux glibc на Intel и Solaris с некторыми дополнительными библиотеками..)

b) Запустить Squid при помощи "catchsegv". (Linux glibc Intel)

однако эти решения не обеспечивают такой широкой детализации как использование gdb.

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