У меня есть VPS-сервер с WHM 11.36.0 (сборка 14) и CENTOS 6.4 x86_64 xenpv - control
У меня есть несколько учетных записей на моем сервере, и всякий раз, когда я делаю запрос к одной из них, запрос занимает несколько секунд. Когда переводы подключены, это быстро, но меня беспокоят первые 20 секунд «ничего не происходит».
Мы активно используем наши VPS в моей организации, и я не могу допустить замедления.
Кто-нибудь знает, почему это происходит?
У меня не очень технический опыт работы с серверами (я программист), поэтому я не уверен, как правильно настроить серверы, для меня это выглядит как ошибка DNS, но я не знаю, как их отлаживать или восстанавливать вопросы! Кто-нибудь может помочь?
Вот два веб-сайта, которые в настоящее время испытывают такое «зависание»:
ОБНОВИТЬ:
Я разговаривал со своими хостами VPS, и официальная версия гласит, что зависание вызвано моим локальным DNS, а не DNS сервера, но, очевидно, эта проблема возникает только при попытке доступа к учетной записи на нашем собственном сервере и больше нигде в сети.
Чтобы проверить это, я изменил свой локальный DNS на 8.8.8.8 и 8.8.4.4, а затем повторил это изменение на нашем маршрутизаторе. Кажется, что в поведении вообще нет никаких изменений.
Я отчаянно пытаюсь решить эту проблему, но пока безрезультатно!
Чтобы проверить, является ли это проблемой DNS или TCP-соединения, я бы установил tcpdump
на сервере, Wireshark
на вашем клиенте и проведите некоторые измерения самостоятельно. Это требует некоторых навыков работы с консолью, но попробовать стоит.
Мы захватим необработанный трафик из вашего сетевого интерфейса и заглянем в недра сети, чтобы выяснить, проблема ли это в DNS или TCP. Однако это не решит основную причину вашей проблемы, а только укажет вам, что нужно искать дальше.
Вся эта публикация основана на предположении, что это либо проблема тайм-аута обратного просмотра DNS, либо более глубокая проблема в сети.
После установки tcpdump
, выясните, через какой физический сетевой интерфейс HTTP-запросы попадают на ваш сервер. Затем определите общедоступный IP-адрес машины, с которой вы работаете - это необходимо, чтобы отфильтровать нежелательный шум, если вы запустите тест соединения.
Назовем IP-адрес вашего сервера A
и IP-адрес вашего клиента B
.
Предполагая, что интерфейс, содержащий IP-адрес этого виртуального хоста, называется eth0
ты должен бежать tcpdump
как пользователь root
как это:
# tcpdump -n -s 1500 -w /tmp/tcpdump.pcap -i eth0 \(host A and host B and tcp port 80\) or udp port 53
(заменить A
и B
с вашими IP-адресами; если вы используете https
вместо того http
заменить tcp port 80
с участием tcp port 443
)
Программа запустится и захватит весь трафик между вашей клиентской машиной и вашим сервером, а также пакеты DNS (боюсь, почти все из них, но мы вернемся к этому позже) и сохраним содержимое в файле /tmp/tcpdump.pcap
.
Затем запустите свой запрос. После того, как вы заметили проблему, вернитесь к консоли и остановитесь. tcpdump
нажав CTRL+C
.
Теперь предлагаю вам установить программу Wireshark на вашем клиентском компьютере для более глубокого анализа.
После установки загрузите файл со своего сервера на клиентский компьютер и загрузите файл в Wireshark через File -> Open
.
Чтобы проверить правильность установления связи TCP, найдите первые три пакета. Если перехват сетевого трафика прошел успешно, найдите первый пакет с TCP SYN
установлен флаг. Отметьте это с помощью мыши и выберите Analyze -> Follow TCP Stream
чтобы отфильтровать это единственное TCP-соединение (мы делаем это, потому что обычно у вас будет довольно много TCP-соединений от одного запроса к веб-серверу, но пока мы хотим рассмотреть только одно).
Окно откроется, просто закрой его снова, нам это не нужно. Теперь выделите первый пакет и выберите Edit -> Set time reference (Toggle)
. Это сделает все временные метки во всем окне относительно первого помеченного вами пакета, чтобы мы могли проверить, в порядке ли время. Также установите View -> Time Display Format -> Seconds since previous displayed packet
если это не по умолчанию.
Посмотрите на первые четыре пакета. Вы заметите, что у них будут установлены определенные TCP-флаги:
SYN
установлен флаг.SYN
и ACK
установлен флаг.ACK
установлен флаг.HTTP GET
запрос.ACK
при условии, что HTTP GET
был полученПосмотрите на временные метки этих семи пакетов. Все они должны следовать очень близко друг к другу; он должен выглядеть примерно так:
Вы можете видеть, что все эти пакеты очень внимательно следуют друг за другом, их разделяют всего сотни миллисекунд. Если это ваш случай, TCP-соединение работает само по себе, и мы более подробно рассмотрим DNS. Но если это не Хорошо для вас, если вы видите длительные задержки или даже повторные передачи TCP или сообщения о «дублировании ACK» и т. П., Тогда вам нужно изучить более глубокую сетевую проблему. Тогда вернитесь к своему VPS-провайдеру.
Однако, если все в порядке, мы смотрим на DNS. Для этого мы хотим проверить следующий факт:
Я буду следовать следующему гипотезу:
IN PTR
вопрос к серверу именИтак, теперь вам нужно немного перетасовать числа. Предположим, что IP-адрес вашего клиента 1.2.3.4
. Сейчас обеспечить регресс число (4.3.2.1
) и добавьте суффикс .in-addr.arpa
к нему. Теперь вы создали правильный запрос для Wireshark. в Filter
-поле, скажем:
dns.qry.name == "4.3.2.1.in-addr.arpa"
В приведенном ниже примере я запрашивал полное имя моего сервера на 78.47.204.196
, поэтому мой фильтр dns.qry.name == "196.204.47.78.in-addr.arpa"
:
В моем случае вы видите интересный эффект. Мой сервер имен в 192.168.1.1
не ответил достаточно быстро, на вкус моего клиента, поэтому он отправил другой запрос, но на этот раз с использованием IPv6. Однако на самом деле это не имеет значения, он просто отправит тот же запрос снова, если у вас нет IPv6. Вы видите, что настоящий ответ - yalla.hackers-r-us.org
- приходит через 2,96 секунды после запроса. Это медленно, но ответ есть.
Вы знаете, что необходимо проверить следующее:
Если вы видите, что запрос снова и снова отправляется снова в течение 30 секунд, вы знаете, что это проблема DNS.
Извините за длинный пост, но из того, что вы написали, я предположил, что вы не слишком глубоко разбираетесь в этих вещах.
Ваш инстинкт, что это может быть проблема с DNS, вполне может быть правильным. При первом подключении VPS пытается выполнить обратное разрешение входящего IP-адреса для журналов, и если DNS-серверы, которые он настроен для использования, не отвечают, он просто будет сидеть и ждать некоторое время.
Вы можете попробовать изменить DNS-серверы VPS на 8.8.8.8
и 8.8.4.4
(Открытые DNS-преобразователи Google), чтобы увидеть, улучшит ли это положение вещей. В качестве альтернативы спросите у провайдера VPS его локальные настройки DNS и убедитесь, что они правильно установлены в /etc/resolv.conf
(или там, где эти настройки находятся в WHM / cPanel).
Если бы вы подключались к хосту через SSH, я бы согласился с предложением DNS. Однако в этом случае вы просто проверяете задержку для обслуживания HTTP-запроса.
Глядя на первый сайт в браузере Chrome, я получаю такую информацию о задержке, как:
2,04 с (загрузка: 2,04 с, DOMContentLoaded: 1,42 с)
Второй сайт:
4,59 с (загрузка: 4,40 с, DOMContentLoaded: 4,21 с)
Еще один инструмент, который мне нравится использовать, - это проверка хоста.
Сайт 1:
http://check-host.net/check-report/1dc3fb
Сайт 2:
http://check-host.net/check-report/1dc3fa
Некоторые другие вещи сразу же на сайте 1:
www.google-analytics.com
Сайт 2:
https://twitter.com/statuses/user_timeline/spare_brain.json?callback=twitterCallback2&count=5
Могу я также предложить зарегистрироваться в фантастических инструментах Google для веб-мастеров: