Apache 性能最优化分析(3)

王朝厨房·作者佚名  2007-01-02
窄屏简体版  字體: |||超大  

四. 关于编译时设置

1) mod_status 和 ExtendedStatus On

如果在编译Apache时您包含了mod_status并且将ExtendedStatus设置为On,Apache将为每个请求进行两次gettimeofday(2)系统调用(或者针对不同的系统调用times(2))及(在1.3以前的版本)许多次time(2)。这些都是为了在报告中含有时间戳。为了得到最佳性能,请将ExtendedStatus设为Off(这是缺省的设置)。

2) 多socket中的accept 串行化

这部分文章将讨论Unix socket API不利的一方面。假设您的服务器用多个Listen命令侦听多个端口或者多个IP地址。Apache使用select(2)检测每个socket连接(connection)是否就绪。select(2)示意有零个或至少一个连接等待某个socket。Apache含有多个子进程,所有空闲的子进程同时侦听新的连接。原始的实现如下所示(这个例子不是真正的代码,它出于教学目的被简化了)

for (;;) {

for (;;) {

fd_set accept_fds;

FD_ZERO (&accept_fds);

for (i = first_socket; i <= last_socket; ++i) {

FD_SET (i, &accept_fds);

}

rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);

if (rc < 1) continue;

new_connection = -1;

for (i = first_socket; i <= last_socket; ++i) {

if (FD_ISSET (i, &accept_fds)) {

new_connection = accept (i, NULL, NULL);

if (new_connection != -1) break;

}

}

if (new_connection != -1) break;

}

process the new_connection;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航