我在运行 OS X Lion 的 MacBook Pro 上本地运行 Apache。直到最近,服务器响应都很好。但现在,它似乎响应缓慢。
我在 22:17:00 在我的计算机上发出了访问虚拟主机的请求。Apache 直到 22:17:10 才开始响应。我检查了我的 Apache 日志,结果如下:
127.0.0.1 - - [28/Apr/2012:22:17:10 +0100] "GET / HTTP/1.1" 304 -
从我所看到的,似乎没有任何东西阻碍它access_log
,并且也没有任何错误error_log
。
这种情况每隔几分钟就会发生一次,中间会间隔正常速度响应。最明显的是,在过去几分钟内没有建立连接时。
有人知道为什么会发生这种情况吗?
答案1
使用 chrome 开发者工具 (ctrl-shift-I),您可以准确了解浏览器挂起的具体阶段,如下所示;
另外,您可以在 strace 下启动 httpd 来准确观察它正在等待什么(不确定等效的 OS X lion 命令是什么......)
# strace -t -T -f /usr/sbin/httpd -X -f /etc/httpd/conf/httpd.conf
23:19:35 execve("/usr/sbin/httpd", ["/usr/sbin/httpd", "-X", "-f", "/etc/httpd/conf/httpd.conf"], [/* 29 vars */]) = 0 <0.000008>
brk(0)
.
.
.
显然会有相当多的输出,但由于您的页面挂起 10 秒,您应该有足够的时间来剪切和粘贴花费 10 秒的系统调用。
您可能需要检查 httpd.conf 文件中的 HostnameLookups 是否已被禁用;
http://httpd.apache.org/docs/2.1/mod/core.html#hostnamelookups
当将其设置为“on”时,httpd 会尝试对每个传入请求进行 DNS 查找,如果您的本地命名无法正常工作或连接不可靠,则此速度可能会很慢。
答案2
我在这里发现了我的问题:https://stackoverflow.com/a/7553256/1082754
答案3
它也可能源于 mysql 连接。你可以通过将连接字符串放在 php 页面顶部并在连接字符串前添加 return false 来控制它,然后测试它是否正常。
如果问题是由于 mysql 连接速度慢造成的,您可以这样解决问题:
如果您关闭了 mysql 的网络,我的意思是如果您在 [mysqld] 下的 my.ini 中激活了 bind-address="127.0.0.1"。您还应该为 ip6 打开 bind-address = ::1
# Change here for bind listening
bind-address="127.0.0.1"
# for ipv6
bind-address = ::1