配置Apache 1.3或者Apache 2.0服务器的5个技巧

本文提出了配置Apache 1.3或者Apache 2.0服务器的5个技巧。我们将阐述以下的配置方案:调整Apache的accept()串行化、Apache 2.0线程、采用mod_ssl的SSL会话缓存、优化keep-alive超时值以及检查服务器负载以平衡服务器可处理的请求量等。

AcceptMutex

Apache 1.3.21和Apache 2.0中引入了AcceptMutex 指示符,该指示符给调节服务器的性能带来了一个难得的机会。该指示符配置Apache的accept()处理方式。在某些只有一个侦听器的系统上是不需要接受阻塞的。这就叫Single Listen Unserialized Accept (SLUA)。可是,对那些具有多个侦听器的配置或者在接受系统调用函数上(不管有多少个侦听器)存在thundering herd问题的操作系统上,连接接受程序就必须进行串行化了。

Covalent的Sander Temme对accept()阻塞策略进行了一定程度的性能分析。这份报告总结了Apache 1.3.21在这一方面的有关调整策略,如下所示:

  • Irix的uslock (uslock)
  • POSIX跨进程阻塞 (pthread)
  • SystemV Semaphores (sysvsem)
  • fcntl()阻塞(fcntl)
  • flock()阻塞 (flock)
  • OS/2 Semaphores (os2sem)
  • TPF 阻塞 (tpfcore)
  • None(无)

尽管采用AcceptMutex none也是可能的,但是你的系统在这种配置下有可能受到thundering herd问题和死锁的困扰。这些问题会导致服务器减慢处理速度乃至停止响应。none选项绝对不能用在实际系统上。在非正式的测试下,pthread锁应该是最好的解决方案。然而,pthread跨进程阻塞并不是所有系统都可用的。

采用2.0版和线程(worker MPM)

Apache 2.0有一个显著的改进特性就是支持线程。某些操作系统,比如Solaris,在采取线程技术的条件下可以显著地改进系统性能。而其他操作系统,比如Linux,其性能改进就可能并不是很显著。

在采用Apache 2.0的情况下,处理请求的策略已经理论化了,这就是所谓的MPM:多进程模式(Multi Process Model)。而老一些的Apache 1.3模式则以prefork MPM为代表,在Unix平台上就是默认MPM for 2.0 。在这种模式下有一个独立的进程处理每一请求。可是,假如你编译Apache 2.0的时候带 --with-mpm=worker 选项,那么服务器请求就会由线程来处理。这种方法在精心设计线程实现方案的情况下会大大降低操作系统处理请求的负载。

SSL会话缓存

如果你对Apache 1.3或者在Apache 2.0采用了mod_ssl补充插件(在在Apache 2.0中则已经包含在内),那么你可以采用会话缓存提升系统性能。这种改进会显著降低SSL连接负载。设置会话缓存有三种途径:

  • DBM (dbm),这是一种在磁盘上存储项目的常用格式(htpasswd可以DBM格式存储密码)
  • 共享内存循环缓存(shm 或者shmcb)
  • 共享内存哈系表(shmht)

在采用以上选项的时候需要指定文件路径。在使用DBM变量的情况下,文件将被写入磁盘。而对共享内存变量来说,文件将被用做操作系统优选共享内存机制的存储备份。值得注意的是,大多数操作系统不允许共享内存段建立在通过网络装载(mount)的驱动器上,比如NFS等,所以必须给服务器提供文件路径。

我们建议你采用共享内存,不过,在那些没有共享内存的平台上则不妨采用DBM方案。


SSL会话缓存的更多信息和有关语法请见:
  • modssl.org
  • Apache.org

KeepAliveTimeout

假设某位用户在阅读网站上的某一网页,然后它单击某一导向站内另一网页的链接。假如这一过程发生在KeepAliveTimeout 周期之内(默认为15秒),那么就不必创建新的TCP服务器连接。这样做大大减少了计算机的负载。然而,在这一时间区域内服务器也不能处理更多的请求。KeepAliveTimeout周期过后,服务器才可以处理来自不同客户机的最新请求。因此,你必须增加请求进程或者线程的数量以满足空闲请求的需要。这个值应该进行仔细的调整以达到最佳状态。

采用mod_status

采用mod_status检查服务器负载情况可以从中获得调整服务器性能的重要信息。

apachectl status命令是检查服务器状态的快捷途径。假如该命令的输出结果并没有始终如一的显示出可用的工作进程。那么最好增大MinSpareServers或者MinSpareThreads值(在Apache 2.0采用线程化MPM的情况下)。同时你可能还需要增大MaxClients值。


有关mod_status和Apache模块mpm_common的更多信息请参考mod_statusmpm_common

小结

你完全可以采用本文提出的技巧使服务器的性能最大化同时维持网站的正常运行。

时间: 2016-07-07

配置Apache 1.3或者Apache 2.0服务器的5个技巧的相关文章

配置Apache 1.3/2.0服务器的5个技巧

本文提出了配置Apache 1.3或者Apache 2.0服务器的5个技巧.我们将阐述以下的配置方案:调整Apache的accept()串行化.Apache 2.0线程.采用mod_ssl的SSL会话缓存.优化keep-alive超时值以及检查服务器负载以平衡服务器可处理的请求量等. AcceptMutex Apache 1.3.21和Apache 2.0中引入了AcceptMutex 指示符,该指示符给调节服务器的性能带来了一个难得的机会.该指示符配置Apache的accept()处理方式.在

apache配置-Apache配置完成无法打开localhost或127.0.0.1

问题描述 Apache配置完成无法打开localhost或127.0.0.1 弄了一天了都没成功,快哭了-- 因为要学习android的网络编程,需要使用Apache服务器. 安装完成之后,apache服务启动了,端口也没有被占用,就是打开不了localhost 求大神帮帮我啊--! 下面是log的error日志:[Sun May 24 19:27:58 2015] [notice] Parent: Received shutdown signal -- Shutting down the se

The Apache Software Foundation Announces Apache® Zeppelin™ as a Top-Level Project

刚刚收到Zeppelin创始人moon soo Lee发给Zeppelin User group的邮件,说zeppelin已经从孵化器毕业,顺利升级为apache顶级项目.以后介绍zeppelin可以去掉incubator了.ASF官方声明:https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces92 原邮件如下: Congratulations and thank you everyon

Apache Storm 衍生项目 & Apache Flink初接触

storm-yarn 概要 storm是一个近似于实时的计算框架,甩开hadoop上的原生mapreduce计算框架不只一条街.如果能将storm引入到hadoop中,对存储于hdfs的数据进行分析必然极大的提高处理性能.storm-yarn就是这样一个项目,由yahoo实现,目前已经开源. 除了storm-yarn试图将storm整合进hadoop,以提升hadoop的分析处理能力的尝试之外,Hortonworks也高调宣布在2014年推出整合了storm的hadoop发行版.当然Horton

浅谈28短信网谷歌pr从0到4飞跃的技巧

谷歌pr最近更新,成了站长朋友茶余饭后讨论的热门重点,从这次pr的更新来看,跟以往有着明显的不同,首先从pr的更新幅度来看,以往一般上升或者下降的范围不太明显,而这次有从0直接飞跃到3.4的,甚至28推直接从0到6的跳跃;其次是谷歌对于老站有着以往不同的对待方式,以前老站不去更新甚至是一个有pr的域名放在那边也保留这谷歌pr值,而从这次谷歌的更新角度来看,如果一个网站长期不更新的话,pr下降是必然的,最明显的就是从一个长期不更新的pr4老站,直接变成无pr值. 谷歌pr更新,当然是几家欢喜几家愁

photoshopcs6.0中磁性套索工具使用技巧图解

  通过用磁性套索选择选区,掌握套索使用中的一些技巧 1使用磁性套索中撤销自动生成点,可以按delete键 2在使用磁性套索时遇到锐利的角点等不平滑处可以手动点击生成端点 3使用磁性套索时,可以通过按ctrl+加号或者减号放大缩小图片,或者用alt+鼠标滚轮放大缩小图片,恢复原始大小可以按ctrl+0实现 4如果操作失误在没有完成选区选择就将选区闭合,可以通过勾选属性栏添加选区,再次用使用套索完成任务 5完成选区选择可以通过减小选区修饰选区 方法/步骤 将从百度上下载的一副图片拖动到photos

javaee-两个GlassFish4.0服务器之间的远程EJB调用

问题描述 两个GlassFish4.0服务器之间的远程EJB调用 两台服务器在不同的机器上,环境为jdk8,javaee7. 当我在一台服务器A上调用服务器B的时候,如果在普通的java main方法中调用 : InitialContext ctx = new InitialContext(); ctx.lookup("corbaname:iiop:192.168.0.210:3700#java:global/RemoteEjb/SayHelloService!rm.SayHelloServic

《圣殿祭司的ASP.NET4.0专家技术手册》----1-15 将ASP.NET程序开发服务器Port固定的技巧

1-15 将ASP.NET程序开发服务器Port固定的技巧 圣殿祭司的ASP.NET4.0专家技术手册 如果项目以"文件系统"建立,则网页执行时会使用Visual Studio内建的"ASP.NET程序开发服务器",这样便解决了操作系统无IIS服务器的困扰,但有的人问:"能否将Port固定下来?"因为变动的Port,有时要以完整路径引用参考目录下的照片或CSS设置就会产生困扰(如/Images/Pic01.jpg或/Css/WebSite.css

oauth-有OAUTH2.0服务器开发资料吗?

问题描述 有OAUTH2.0服务器开发资料吗? 我想搭建一个oauth2.0服务器,有相关资料吗?找了几个月都找不到满意的资料,网上都说介绍怎么基于新浪等网站的API搭建的应用,书店也找不到 解决方案 同求,我现在也想搭建服务端.可惜没资料啊!