воскресенье, 24 апреля 2016 г.

Squid: Prefork для хелперов

Обычно стандартные умолчания предзапуска (prefork) хелперов Squid достаточно низкие либо вообще равны нулю:

 #Default:  
 # sslcrtd_children 32 startup=5 idle=1  
   
 #Default:  
 # sslcrtvalidator_children 32 startup=5 idle=1 concurrency=1  
   
 #Default:  
 # url_rewrite_children 20 startup=0 idle=1 concurrency=0  
   
 #Default:  
 # store_id_children 20 startup=0 idle=1 concurrency=0  
   

При первоначальном запуске стартует минимальное число процессов, и, после установления соединения с клиентами, производится последующий запуск хелперов по мере необходимости (on demand).

Плюс такого подхода в том, что первоначально расходуется весьма мало памяти (однако в дальнейшем потребление памяти резко возрастает).

Однако, последующий запуск необходимых хелперов (это прежде всего касается sslcrtd, url_rewrite и store_id) вызывает достаточно длительные задержки в отклике, на уровне клиента зачастую наблюдаются задержки реакции прокси от 5 до 30 секунд (!). Это время зависит от особенностей используемой ОС, наличия/отсутствия виртуализации, настроек ОС, степени загруженности сервера, и многих других факторов - таких, например, как быстродействие подсистемы ввода-вывода и даже количества контроллеров IO.

Кроме того, регулярно выполняемая ротация логов (даже без выполнения собственно ротации, при использовании внешних средств и при установке параметра logfile_rotate 0) останавливает процессы хелперов до значения idle, в каждом цикле, и, после ее завершения, запуск начинается заново (в текущих версиях Squid не существует штатной возможности остановки дочерних процессов в случае длительного бездействия, только средства ротации).

Таким образом, дабы ускорить реакцию прокси на изменения внешней нагрузки сразу после запуска и в дальнейшем, есть смысл повысить стартовые значения количества запускаемых хелперов и величины idle (в зависимости от характера нагрузки).

Например, некрупный прокси бизнес-центра с числом клиентов 100-200 рабочих станций должен иметь (внимание, это хорошие начальные значения, не следует их воспринимать как окончательное ультимативное решение!) измененные значения процессных параметров используемых хелперов примерно следующего вида:

 sslcrtd_children 32 startup=10 idle=5  
   
 url_rewrite_children 64 startup=4 idle=4 concurrency=2  
 store_id_children 32 startup=4 idle=4 concurrency=4  
   

Эти примеры приведены для Squid 3.5.x.

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

Я лишь рекомендую не превышать дефолтные максимумы, поскольку это не рекомендуется разработчиками.