我在 debian 6.0 上运行一个 apache web 服务器,内核是 2.6.32-5-amd64。
在一天中的某些时间,通常是当在线人数较多时,服务器响应会非常慢。我确信,那不是负载,不是 DB,不是 PHP,而是这个命令:
time wget 127.0.0.1
相当慢:
--2013-09-20 15:36:49-- http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-09-20 15:36:52 ERROR 404: Not Found.
real 0m2.663s
user 0m0.004s
sys 0m0.004s
响应时间最多为 5 秒。等待点位于“HTTP 请求已发送,正在等待响应...”之后。所有 http 请求都存在这种延迟,之后页面生成速度很快,例如 50 毫秒。
我使用测试了我的网络http://tools.pingdom.com/fpt/,第一次响应总是很慢,大多数内容加载也很慢,但很少有相当快,但我无法判断这个工具是否有某种缓存。
telnet 127.0.0.1 80
速度快,响应显示无延迟:
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
问题可能出在哪里?请求到达 Apache 之前肯定发生了一些事情。
请至少告诉我一些用于此目的的调试工具。
答案1
我认为,对于不是由全职工程师团队创建的普通网站来说,2.6 秒并不算太慢(参见:google.com)。
您的问题可能出在 I/O、网络、磁盘、内存等。
您将必须跟踪应用程序堆栈。这涉及查看您的 Web 服务器软件(apache httpd、ngnix 等)、php 堆栈、php 代码以及支持堆栈的任何后端存储机制(如文件系统和 MySQL)。
延迟可能是由磁盘速度慢、未编入索引的 mysql 查询、网络瓶颈,甚至是代码中的优化循环或函数引起的。我认为,除非您能提供有关您的环境的详细信息并提出具体问题,否则我们无法在这方面为您提供太多帮助。