使用应用程序跟踪对性能改变进行量化分析
初看起来,系统调用耗费的时 间下降了,但这是因为使用了 -t 选项将跟踪任务限制于一些有意义的系统调用。大多数系统调用并没有 发生变化,但现在有 500 次 open64 调用,其中有 400 次返回了错误。执行 open64 的时间增加了(从 0.006 秒增加到 0.22 秒),同时用户空间部分的时间也增加了(从 0.12 秒增加到 0.141 秒)。 时间增加是因为 Apache 现在必须完成附加的工作以处理该请求,即使没有配置重写。单独的 AllowOverride Limit 配置明显地增加了开销。问题依然存在,即什么导致了这些错误? 要回答这个问 题,可以跟踪单个 Web 请求,如清单 6 所示。 清单 6. 确定 open64 调用失败的原因
清单 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 在缺省情况下会执行这些反向查找,但现在这种行为已经有了改变。 还有另一种情况,其中必须进行反向 DNS 搜索。当基于主机名(而不是 IP 地址)配置访问限制时, Apache 必须首先将 IP 地址反向解析为相应的主机名,然后再次将主机名解析为 IP 地址,以确保它们 正确匹配。因为反向域名搜索可以由地址块所有者确定,所以要防止 IP 欺骗的发生,必须进行第二次查 找。可以通过应用程序跟踪来确定 DNS 解析的影响吗? 要对其进行测试,可以从前面的示例中删 除 AllowOverride Limit,然后添加 Allow from ibm.com 代替缺省的 Allow from all。然后,对 DNS 服务器进行更改以便向您的工作站返回 something.ibm.com,确保初始反向检查能够成功并且随后的正向 查找必须通过 Internet 完成。在示例运行过程中,对保护的 Web 服务器的请求耗费了 15 秒的时间。 相反,使用 IP 地址代替 ibm.com 所耗费的时间小于半秒钟。清单 7 显示了在使用 DNS 确保安全时, 对一些系统调用进行统计。 清单 7. 通过主机名进行限制的 Web 请求的 truss 输出 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |