Я заметил, что моему веб-серверу в последнее время требуется много времени для загрузки страниц. Используя Firebug, я понял, что поиск DNS занимает около 4 секунд:
Connecting: 304ms
Sending: 0ms
Waiting: 3.45s
Receiving: 0ms
Я думал, что долго ждать ответа HTTP. В командной строке я инициировал:
telnet localhost 80
GET / HTTP/1.1
Host: {IP Address}
И подождал, пока не будут возвращены следующие три команды, прежде чем ввести дважды. Первая команда, которую я использовал, - это узнать номер порта:
lsof -p `pidof telnet`
Затем, чтобы узнать процесс:
netstat -nap | grep {port}
И наконец:
strace -o /tmp/output -f -r -s4096 -p {PID}
Затем я нажал Enter в команде telnet, чтобы вернуть запрос и войти в выходной файл. Когда telnet наконец вернулся, я взглянул на выходной файл и поискал самые длинные процессы, а именно:
6152 12.143817 read(17, "GET / HTTP/1.1\r\n", 8000) = 16
6152 0.000178 gettimeofday({1330023713, 143410}, NULL) = 0
6152 0.000169 poll([{fd=17, events=POLLIN}], 1, 60000) = 1 ([{fd=17, revents=POLLIN}])
6152 13.550608 read(17, "Host: 164.177.156.189\r\n", 8000) = 23
Кто-нибудь знает, почему эти два процесса занимают так длинный? Это проблема поиска DNS? Что мне делать, чтобы решить проблему?
Вам потребовалось 12 секунд, чтобы набрать «GET / HTTP / 1.1 \ r \ n» и 13 секунд, чтобы ввести «Host: 164.177.156.189 \ r \ n». Так что сервер потратит столько времени на их чтение.