Сисадмин-любитель (ulrith) wrote,
Сисадмин-любитель
ulrith

оптимизация производительности squid

Как я уже отчитывался тут, я на своём домашнем чудо-серверочке поставил squid, в первую очередь заради кэширования апдейтов для всех трёх домашних убунт, ну и вообще, для скорости.

Но вот незадача: поначалу всё вроде было хорошо (или же я просто не присматривался), а потом я стал отмечать большие тормоза. Т.е. без прокси страницы грузились ощутимо быстрее. Fuuuuuuuuuuuuu…

В общем пришлось идти гуглить вопрос об ускорении squid. Нагуглил аж чувака из Last.FM, который оптимизирует свой squid под пиздец-нагрузку. Но мне же не надо пиздец, мне для дома для семьи.

Так что я из его советов взял только те, которые касались конфига и подредактировал его соответственно. А заодно размер кэша уменьшил с 10 Гб до 5 чтобы он лучше объёму памяти Шивы соответствовал (512 Мб).

Вроде как залетало пока. Но буду ещё дальше следить…

Вот рекомендуемый мной squid.conf:

ВНИМАНИЕ! Я вырезал все лишние параметры, такие как http_port IP:PORT, так как их использование выходит за рамки этой записи в блоге.

hosts_file /etc/hosts
dns_nameservers x.x.x.x x.x.x.x
cache_replacement_policy heap LFUDA
cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 50 KB
cache_dir aufs /var/spool/squid 40000 16 256
cache_mem 100 MB
logfile_rotate 10
memory_pools off
maximum_object_size 50 MB
quick_abort_min 0 KB
quick_abort_max 0 KB
log_icp_queries off
client_db off
buffered_logs on
half_closed_clients off

Хорошо, но что это все дает?
hosts_file /etc/hosts: заставляет squid искать какие-либо записи об узлах в файле /etc/hosts. Не спрашивайте меня почему, но он не очень хорошо знает то, что этот файл используется по-умолчанию во всех дистрибутивах Linux.

dns_nameservers x.x.x.x x.x.x.x: Важно! Squid приостанавливает установление соединения до тех пор, пока не будет выволнен DNS-запрос, но каким-то образом, указание DNS-серверов в squid.conf исправляет это поведение (и да, это должны быть действительные сервера имен).

cache_replacement_policy heap LFUDA: Возможно, вы не захотите использовать политику замещения LFUDA. В противном случае рекомендую остановится на варианте с хипом, как на обладающим значительным преимуществом в производительности по сравнению с LRU. Подробную информацию о других политиках можно узнать тут.

cache_swap_low 90: нижняя граница, преодолев которую squid начинает вычищать мусор из своего кэша - измеряется в процентах. Если ограничение на размер хранилища составляет 10Гб, squid начнет расчистку, когда 9Гб будет использовано.

cache_swap_high 95: Верхняя граница. Squid начнет агрессивно избавляться от старых файлов в кэше, используя политику, указанную выше. Такой процесс начнется при 9,5Гб в приведенном выше примере. Если у вас огромный кэш, то следует отметить то, что эти проценты будут работать лучше, если будут находиться рядом, например для кэша 100Гб этот диапазон равен 90Гб/95Гб - 5Гб разницы. В этом случае границы лучше установить на 94%/95%.

maximum_object_size_in_memory 50 KB: Если вы не хотите супер быстро выдавать большие файлы из памяти, рекомендую указать значение пониже - в основном для того, чтобы держать под контролем использование памяти. Большие файлы монополизируют этот жизненно необходимый ресурс и, давая вам лучшую результативность в байтах, пожертвуют результативность запросов ввиду того, что файлы поменьше будут добавляться и удаляться из области подкачки.

cache_dir aufs /var/spool/squid X X X: я настоятельно рекомендую НЕ избавляться от AUFS. Что касается производительности, все прочие методы хранения оказались много более медлительными. Конечно же, необходимо заменить три X-са своими ограничениями на хранилище.

cache_mem 100 MB: Оставьте это значение низким. Оно указывает количество оперативной памяти, которую squid будет использовать для хранения закэшированных объектов. Помните, что squidу требуется приблизительно 100Мб на каждый Гб хранилища. Если у вас 10Гб хранилище, squidу потребуется ~1Гб только на то, чтобы с ним справиться. Убедитесь в том, что cache_mem + (размер хранилища * 100 Мб) меньше доступного количества оперативной памяти, иначе squid начнет использовать подкачку.

memory_pools off: Это необходимо для того, чтобы squid не держал в памяти то, что он больше не использует активно.

maximum_object_size 50 MB: измените этот параметр так, чтобы он соответствовал максимальному размеру объекта, выдаваемого из кэша. Я-бы посоветовал не задирать этот параметр слишком высоко. Лучше кэшировать много маленьких файлов, чем один большой, который скачают только четверо людей.

quick_abort_min 0 KB: в некоторых случаях эта штука полезна, но не в случае оптимизированного squid. Простыми словами, quick_abort занимается тем, что рассчитывает, сколько данных осталось передать, когда клиент отменяет закачку. Если это количество находится в пределах quick_abort, squid продолжит закачку, после чего поместит файл в кэш. Звучит отлично, правда? Чертовски плохо. Если клиент совершает несколько запросов, то это может вылиться в несколько скачиваний squidом одного и того же файла. Это все портит и замедляет ваш squid. 0 KB отключает эту возможность.

quick_abort_max 0 KB: см. quick_abort_min

log_icp_queries off: если вы используете cache_peers, то возможно не хотите знать о каждом разе, когда squid общается с одним из партнерских кэшей. В большинстве случаев это лишнее журналирование, и, к тому же лишний процесс ввода/вывода, который можно использовать еще где-нибудь.

client_db off: Если эта опция включена, squid будет вести статистику по каждому клиенту. Через некоторое время это может все затормозить, поэтому эту опцию лучше оставить выключенной.

buffered_logs on: Буфферизует запись в файлы журналов. Может немного увеличить производительность. Ваши данные могут быть иными.

half_closed_clients off: посылает сообщение о закрытии соединения клиентам, которые оставляют полуоткрытое соединение с сервером squid.
Tags: sheeva, unixway
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 1 comment