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方案。

  KeepAliveTimeout

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

  采用mod_status

  采用mod_status检查服务器负载情况可以从中获得调整服务器性能的重要信息。清单A 给出了httpd.conf文件内必要的指示符示例。

  在清单A中,来自127.0.0.1或者由具有双反斜线域名example.com的计算机所发出的请求都被允许通过进入/server-status来阅读服务器的状态。而其他的全部请求则被拒绝。当然,具体使用的时候你得用网站上的正确信息取代.example.com或者127.0.0.1。注意,某些操作系统会让Apache觉得发自本机的请求像是来自配置为外部IP地址而非127.0.0.1的主机。

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

Apache配置的5个技巧的更多相关文章

  1. Mac OS X 上的Apache配置

    Mac系统自带apache服务器 查看apache版本 sudo apachectl -v 启动apache sudo apachectl start 重启apache sudo apachectl ...

  2. apache配置 php中没有php5apache2_4.dll

    apache配置 php中没有php5apache2_4.dll 今天,在win7系统下安装Apache+PHP+MySQL时,终于体会到了版本多也不一定是好事,各种不兼容,主要是因为动态包的多少问题 ...

  3. Apache 配置多站点访问「为项目分配二级域名」

    一级域名(baidu.com)也叫作顶级域名,注册一级域名是需要付费的. 而二级域名(image.baidu.com)是一级域名的延伸,所以只要购买了一级域名,二级域名是可以任意配置的. 其实(www ...

  4. 【转】Apache 配置虚拟主机三种方式

    Apache 配置虚拟主机三种方式  原文博客http://www.cnblogs.com/hi-bazinga/archive/2012/04/23/2466605.html 一.基于IP 1. 假 ...

  5. Tomcat:利用Apache配置反向代理、负载均衡

    本篇主要介绍apache配置反向代理,介绍了两种情况:第一种是,只使用apache配置反向代理:第二种是,apache与应用服务器(tomcat)结合,配置反向代理,同时了配置了负载均衡. 准备工作 ...

  6. Apache 配置多端口

    Apache 配置多端口,主要是以下步骤 1. 如果电脑是64位的,官网上下载WampServe,装的过程中如果出现msvcp110.dll丢失的话,解决办法如下: 1.1 首先是打开浏览器,在浏览器 ...

  7. linux apache 配置URL地址栏大小写不敏感配置

    1.apache配置 解决如下:把mod_speling.so放到apache目录下的 lib中... 然后修改http.conf文件, 加入:LoadModule speling_module /u ...

  8. CentOS下Apache配置多域名或者多端口映射

    CentOS下Apache默认网站根目录为/var/www/html,假如我默认存了一个CI项目在html文件夹里,同时服务器的外网IP为ExampleIp,因为使用的是MVC框架,Apache需开启 ...

  9. Apache配置HTTPS功能

    apache配置https 一.yum 安装openssl和openssl-devel,httpd-devel 二.生成证书(也可以从公司的证书颁发机构获取): #建立服务器密钥 openssl ge ...

随机推荐

  1. iOS企业开发In House ipa发布流程

    这两天需要发布一个ipa放到网上供其他人安装,需要用到企业级开发者账号.在网上查了一下资料,感觉没有一个比较完善的流程,于是决定把整个流程写下来,供大家参考. 首先详细说明一下我们的目标,我们需要发布 ...

  2. [Algorithms] Radix Sort

    Radix sort is another linear time sorting algorithm. It sorts (using another sorting subroutine) the ...

  3. decode-encode --其他使用可能有问题

    SELECT id,DECODE(name,'password') FROM test UPDATE test SET `name`=ENCODE(`name`,'password')

  4. Vue1.0常用语法

    摘要: var vm = new Vue({ el: "选择器", 挂载到页面的那个元素里,即确定vue的作用范围 外部可通过vm.$el访问,得到的是一个原生dom元素,可进行对 ...

  5. Kubernetes网络框架

    // cmd/kubelet/app/server.go -1.func UnsecuredKubeletDeps(s *options.KubeletServer) (*kubelet.Kubele ...

  6. 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法

    错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/a ...

  7. 实现num1、num2交换,无中间变量

    num1=num1+num2; num2=num1-num2; num1=num1-num2;

  8. 在Docker上安装配置Oracle教程

    地址:https://github.com/wnameless/docker-oracle-xe-11g Docker shell 下: docker pull wnameless/oracle-xe ...

  9. 注册tomcat为windows服务(转载)

    第一部分 应用场景 需要服务器上Tomcat不显示启动窗口 需要服务器上Tomcat开机自启动 ... 第二部分 配置过程 一.修改配置文件 1 {Tomcat_HOME}/bin/service.b ...

  10. rsync+inotify实时同步

    !!!在安装前要先确保,rsync daemon服务配置成功,在安装inotify-tools前先确认你的linux内核是否达到了2.6.13,并且在编译时开启CONFIG_INOTIFY选项,也可以 ...