Apache 性能最优化分析(10)_Windows教程
教程Tag:暂无Tag,欢迎添加,赚取U币!
为了实现虚拟主机,Apache需要用本地socket地址接受连接:
getsockname(3, {sin_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
在许多情况下都有可能去掉这个调用(比如没有虚拟主机,或者在Listen命令中的地址不含通配符)。但目前尚未对此进行优化。
Apache关掉了Nagle算法:
setsockopt(3, IPPROTO_TCP1, [1], 4) = 0
考虑到John Heidemann的论文中提及的问题,请关注两个time调用:
time(NULL) = 873959960
...
time(NULL) = 873959960
第一个出现在请求的开始,另一个用于写入日志。前者是正确实现HTTP协议所必须的,后者的出现是因为通用日志格式指定了记录中包含时间戳。自定义日志模块能够去掉这个调用。或者您可以用某些方法把时间移到共享内存中。参见补丁一节。
正如前文描述的那样,ExtendedStatus On将引发两次gettimeofday调用和一次times调用:
gettimeofday({873959960, 404935}, NULL) = 0
...
gettimeofday({873959960, 417742}, NULL) = 0
times({tms_utime=5, tms_stime=0, tms_cutime=0, tms_cstime=0}) = 446747
ExtendedStatus Off (即缺省值)将避免这些调用。
这个调用看起来也许有些奇怪:
stat("/home/dgaudet/ap/apachen/htdocs/6k", {st_mode=S_IFREG|0644, st_size=6144, ...}) = 0
它用于生成CGI程序所需的PATH_INFO环境变量。事实上,对于指向/cgi-bin/printenv/foobar的某个请求,stat将被调用两次。第一次调用查询/home/dgaudet/ap/apachen/cgi-bin/printenv/foobar,但它并不存在;第二次调用查询/home/dgaudet/ap/apachen/cgi-bin/printenv,它是存在的。无论如何,对于静态请求而言,至少需要一次调用。文件尺寸和修改时间被用来生成HTTP头标(比如Content-Length和Last-Modified)并用来实现协议的特色部分(比如If-Modified-Since)。一个聪明的服务器能够对非静态的请求避免调用stat,但是这样的实现对于模块化的Apache来说太难了。
getsockname(3, {sin_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
在许多情况下都有可能去掉这个调用(比如没有虚拟主机,或者在Listen命令中的地址不含通配符)。但目前尚未对此进行优化。
Apache关掉了Nagle算法:
setsockopt(3, IPPROTO_TCP1, [1], 4) = 0
考虑到John Heidemann的论文中提及的问题,请关注两个time调用:
time(NULL) = 873959960
...
time(NULL) = 873959960
第一个出现在请求的开始,另一个用于写入日志。前者是正确实现HTTP协议所必须的,后者的出现是因为通用日志格式指定了记录中包含时间戳。自定义日志模块能够去掉这个调用。或者您可以用某些方法把时间移到共享内存中。参见补丁一节。
正如前文描述的那样,ExtendedStatus On将引发两次gettimeofday调用和一次times调用:
gettimeofday({873959960, 404935}, NULL) = 0
...
gettimeofday({873959960, 417742}, NULL) = 0
times({tms_utime=5, tms_stime=0, tms_cutime=0, tms_cstime=0}) = 446747
ExtendedStatus Off (即缺省值)将避免这些调用。
这个调用看起来也许有些奇怪:
stat("/home/dgaudet/ap/apachen/htdocs/6k", {st_mode=S_IFREG|0644, st_size=6144, ...}) = 0
它用于生成CGI程序所需的PATH_INFO环境变量。事实上,对于指向/cgi-bin/printenv/foobar的某个请求,stat将被调用两次。第一次调用查询/home/dgaudet/ap/apachen/cgi-bin/printenv/foobar,但它并不存在;第二次调用查询/home/dgaudet/ap/apachen/cgi-bin/printenv,它是存在的。无论如何,对于静态请求而言,至少需要一次调用。文件尺寸和修改时间被用来生成HTTP头标(比如Content-Length和Last-Modified)并用来实现协议的特色部分(比如If-Modified-Since)。一个聪明的服务器能够对非静态的请求避免调用stat,但是这样的实现对于模块化的Apache来说太难了。
相关Windows教程:
- 相关链接:
- 教程说明:
Windows教程-Apache 性能最优化分析(10)。