Назад | Перейти на главную страницу

медленный ответ от прокси-сервера squid - оптимизация

Мы используем кальмар 3.0 на Centos5.3 и в настоящее время 20 пользователей (Internet Explorer) используют этот прокси. Проблема в том, что доступ через прокси медленнее. Даже простая веб-страница, такая как google.com (.au), занимает на 5 секунд дольше, чем прямое соединение без прокси. Похоже, задержка составляет примерно 2-5 секунд. Отключение кеша для google.com (.au) не помогло. Явное определение dns_nameservers не имеет значения.

Параметры сервера: двухъядерный процессор AMD Opteron (tm) 2220, память 6 ГБ, жесткий диск SCSI 60 ГБ

cache_mem 256 МБ
каталог_кеша ufs / usr / local / squid / var / cache 30000 16 256
maximum_object_size_in_memory 256 КБ
minimum_object_size 0 КБ (0-200 Кб - разница невелика, задержка все равно есть)
maximum_object_size 32 МБ

Как бы вы изменили эти спецификации в squid.conf в зависимости от характеристик сервера. Что может вызвать задержку? Также для более крупных веб-страниц, таких как yahoo.com.au, есть способ получить часть страницы из кеша, а затем остальную часть (изображения в последнюю очередь). На данный момент 15 секунд ничего нет, а затем появляется целая веб-страница.

Моей первой догадкой было бы прослушать трафик с помощью tcpdump и загрузить его в wirehark, чтобы увидеть, где происходит задержка.

tcpdump -i any -s 0 -w /tmp/squid.pcap

(Если вы делаете это через ssh, добавьте в конец «not port ssh».)

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

Вероятные задержки:

  • Браузер связывается с прокси
  • Прокси-сервер, связывающийся с веб-сервером
  • DNS-запросы прокси
  • Прокси-сервер возвращает ответ браузеру

Для некоторых веб-страниц невозможно нарисовать страницу до того, как будет загружена почти вся страница, изображения и все такое. Чтобы ускорить такую ​​страницу, вы можете сделать несколько вещей:

  • Использовать веб-кеш (как и вы): это позволяет быстрее отображать изображения.
  • Используйте более быстрые машины: большую часть времени может быть «композиция», то есть разметка веб-страницы для отображения, а не получение информации.
  • Используйте более быстрые браузеры: это то же самое, что и выше. Если вы используете IE5, попробуйте IE6 или IE7. Если вы используете Firefox 2, попробуйте Firefox 3 или Safari.

Раньше я использовал Internet Explorer для Macintosh (68k в те дни). Я хорошо помню, что видел значок «газеты», который говорил вам подождать, пока IE вычислял, как отображать страницу (не получая данные: вычисляя ...)

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

Я согласен, что анализ трафика - хороший способ определить, почему что-то задерживается. Какая часть сетевого потока действительно вызывает задержку?

Wireshark (и tcpdump) имеют большой набор фильтров, которые вы можете использовать для очистки трафика: единственная причина, по которой вам действительно придется подождать до тихого времени, - это избежать массивного файла дампа TCP. Однако вы можете получить разумный набор данных, просто ограничившись прямым сетевым трафиком на прокси:

tcpdump -s 0 -n -w tcpdump.dat port 3128

(Порт 3128 - это стандартный порт squid: используйте все, что вам подходит.)

Используя Wireshark, вы можете мгновенно фильтровать на основе одного потока трафика TCP: поэтому вам также не нужно беспокоиться о смешивании разных потоков.

Также посмотрите логи в / var / log / squid и выясните, что происходит с запросом: он идет из кеша? Это идет с удаленного сайта? Попробуйте повторные запросы - страница открывается быстрее после однократного запуска?

Я обнаружил, что это проблема DNS, когда я столкнулся с той же проблемой.

Как только я сменил DNS-сервер в squid.conf на нашего интернет-провайдера, задержка исчезла.