首页 > 网站 > Apache > 正文

Apache 性能最优化分析(5)

2024-08-27 18:25:57
字体:
来源:转载
供稿:网友
 USE_FLOCK_SERIALIZED_ACCEPT

  此方法用flock(2)系统调用对一个锁文件加锁。(此文件在LockFile命令中指定)

  USE_FCNTL_SERIALIZED_ACCEPT

  此方法用flock(2)系统调用对一个锁文件加锁。(此文件在LockFile命令中指定)

  USE_SYSVSEM_SERIALIZED_ACCEPT (1.3版及以后)

  此方法借助SysV的信号量(semaphores)实现互斥。但不巧的是SysV信号量有一些负面作用。一是Apache可能在清除信号量之前非正常终止;二是在使用信号量API时需要考虑到任何与服务器UID相同的CGI程序可以进行拒绝服务攻击(就是说所有的CGI程序都可以这样做,除非使用suexec或cgiwrapper之类的方法)。所以,这种方法并不被IRIX之外的系统广泛采纳(由于大多数IRIX系统上,使用前两种方法的代价太大)。

  USE_USLOCK_SERIALIZED_ACCEPT

  (1.3版及以后)此方法仅在IRIX上可用。它调用usconfig(2)创建互斥量。虽然这种方法避免了对SysV信号量的种种争议,但它不是IRIX的缺省方案。这是由于在单处理器的IRIX系统 (5.3或6.2)上,uslock代码比SysV信号量慢两个数量级;但在多处理器的IRIX中前者比后者快一个数量级。这无非使问题复杂化了。所以在多处理器IRIX系统上,您需要用如下的附加参数编译Apache:

    在EXTRA_CFLAGS中添加-DUSE_USLOCK_SERIALIZED_ACCEPT
    USE_PTHREAD_SERIALIZED_ACCEPT


  
(1.3版及以后)此方法实现了POSIX标准互斥量。它理应可以工作在任何实现了全部POSIX线程规范的系统上,但事实是只有在Solaris 2.5或以上的系统及特定的配置中才能工作。如果您尝试这种方法的话,需要小心服务器挂起或者没有响应。服务器在只输出静态网页的情况下运行得很好。

  如果您的系统上有其他串行化的方法,为它书写代码(并把补丁寄给Apache)是值得的。

  有一个考虑到但从未实现的方案是对循环部分地串行化--即允许一定数目的进程进入循环。在同一时刻可运行若干进程的多处理器系统上,这个主意是满不错的。而且前面提到的方案并没有充分利用带宽。可由于高度并行化的服务器实在少见,这个方案的优先级比较低。

  为了得到最佳性能,不用多侦听命令是最理想的。请继续往下看。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表