我注意到我的 Web 服务器最近加载页面需要很长时间。使用 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}
然后,我在 telnet 命令上按下 Enter 键以返回请求,以便它记录在输出文件中。当 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 查找问题吗?我应该怎么做才能解决这个问题?
答案1
你输入“GET / HTTP/1.1\r\n”花了 12 秒,输入“Host: 164.177.156.189\r\n”花了 13 秒。所以服务器花了那么长时间读取它们。