使用应用程序跟踪对性能改变进行量化分析
2006-08-26 08:12:12 来源:WEB开发网清单 6. 确定 open64 调用失败的原因
sunbox# truss -t open64 -p 21136
open64("/.htaccess", O_RDONLY) Err#2 ENOENT
open64("/var/.htaccess", O_RDONLY) Err#2 ENOENT
open64("/var/apache/.htaccess", O_RDONLY) Err#2 ENOENT
open64("/var/apache/htdocs/.htaccess", O_RDONLY) Err#2 ENOENT
open64("/var/apache/htdocs/test.html", O_RDONLY) = 5
清单 6 显示了当请求进入时,Apache 对每个指向 /var/apache/htdocs 的目录进行检查并尝试打开 .htaccess 文件,但是因为 AllowOverride 配置为根目录,所以这个文件并不存在。Apache 必须在每个子目录中查找 .htaccess 文件的重写信息,并对它们进行处理。这样一来,由于额外的系统调用、更多的用户空间开销和额外的磁盘活动,从而进一步增加了延迟。对于 100 次请求来说,增加零点几秒的时间看起来并不是很明显,但是对于一台繁忙的服务器,就会增加更长的延迟。
既然您了解了重写的范围,那么理想的解决方案是不允许重写,并且强制在 httpd.conf 中对所有的内容进行配置。如果失败,可以将配置的范围限制于需要它的目录。在这个研究示例中,把 AllowOverride Limit 放到第二个 Directory 节中,这将仅添加一个额外的 open64 调用,以便在 /var/apache/htdocs 中查找 .htaccess。对所有的父目录进行搜索是浪费时间,因为在这个配置中,不会使用其中的任何文件来提供页面。
研究主机名查找
当 Web 服务器接收到一个请求时,它所知道的关于客户端的信息只有其 IP 地址,如 129.42.42.212 对应于 IBM.com。然而,Web 服务器并不知道这个地址来自于 IBM.com,因此,它必须进行反向 DNS 查找。这样做需要耗费一定的时间,如果在发送请求之前需要这个名称,那么将会延迟对客户端的响应。过去,Apache 在缺省情况下会执行这些反向查找,但现在这种行为已经有了改变。
更多精彩
赞助商链接