1) MPM(多处理模块)配置(主要负责管理网络连接,调度请求)
Apache有3个MPM,分别是: event , prefork和worker。
event这个MPM是在Apache2.4后才有稳定版,比较适用于大量连续连接的情况。event为不同的任务使用单独的线程池. KeepAlive的好处是,可以同一个tcp连接中响应多个请求,这种方式,可以使一个包含大量图片和html文档的请求加速50%,在Apache配置文件httpd.conf中设置KeepAlive设置为On.
prefork是一个非线程的MPM。它的特点:不快但很稳定.它能够隔离每个请求,所以如果某个请求出现故障,不会影响其他请求.使用prefork最重要的一个参数是MaxClients。这个MaxClients足够大,这样可以在访问高峰时发挥很好的性能,但是同时又不能太大,致使Apache所需内存超过物理内存。
worker这个MPM,速度比prefork快很多,由于使用多线程进行访问处理,所以能够处理相对海量的请求,而系统资源的占用要小于基于进程的服务器.work有2个比较重要的参数:ThreadPerChild和MaxClients.ThreadPerChild是用来控制每个子进程允许建立的线程数,MaxClients用来控制允许建立的总线程数.
详细见:http://my.oschina.net/shyl/blog/523070
perfork MPM
<IfModule mpm_prefork_module]]>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule]]>
StartServers : 数量的服务器进程的开始
MinSpareServers : 最小数量的服务器进程
MaxSpareServers : 最大数量的服务器进程
MaxRequestWorkers : 最大数量的服务器进程允许开始
MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
worker MPM
<IfModule mpm_worker_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
StartServers : 数量的服务器进程的开始
MinSpareThreads : 最小数量的工作线程
MaxSpareThreads : 最大数量的工作线程
ThreadsPerChild : 每个服务进程包含的固定数量的工作线程
MaxRequestWorkers : 最大数量的工作线程
MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
event MPM
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
StartServers : 数量的服务器进程的开始
MinSpareThreads : 最小数量的工作线程
MaxSpareThreads : 最大数量的工作线程
ThreadsPerChild : 每个服务进程包含的固定数量的工作线程
MaxRequestWorkers : 最大数量的工作线程
MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
通过/opt/apache/bin/httpd -l,我们可以看到我们的使用是event MPM
<IfModule mpm_event_module>
ServerLimit 10000
StartServers 8
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 4000
MaxConnectionsPerChild 2000
</IfModule>
2)Apache其他参数优化
1. ExtendedStatus Off 关闭对每个请求连接的扩展状态信息跟踪.
2. KeepAlive On //使用keepalive可以在单一连接时进行多个请求.
MaxKeepAliveRequests 0 //最大保持连接数, 0为不限制.
KeepAliveTimeout 5 //每个连接保持时间
3. HostnameLookups Off
//尽量较少DNS查询的次数。如果你使用了任何”Allow fromdomain”或”Denyfrom domain”指令(也就是domain使用的是主机名而不是IP地址),则代价是要进行两次DNS查询(一次正向和一次 反向,以确认没有作假)。所以,为了得到最高的性能,应该避免使用这些指令.
4.使用mod_deflat模块,这个模块可以在用户访问网站时实时将内容进行压缩,然后再传给客户端.所以mod_deflat能极大地加速网站,节约带宽,当然压缩需要花费cpu时间.
LoadModule deflate_module modules/mod_deflate.so
<ifmodule mod_deflate>
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
#CustomLog logs/deflate_log.log deflate
</ifmodule>
5.减少Timeout值 Timeout 30
6. UseCanonicalName on
打开UseCanonicalName是Web服务器的标准做法。这是因为客户发送的大部分请求都是对本服务器的引用,打开该项设置就能使用 ServerName和Port选项的设置内容构建完整的URL。如果将这个参数设置为Off,那么Apache将使用从客户请求中获得服务器名字和端口值,重新构建URL。
7. 取消符号连接 Options FollowSymLinks
FollowSymLinks允许使用符号连接,这将使用浏览器有可能访问文档根目录(DocumentRoot)之外的内容,并且只有符号连接的目的与符号连接本身为同一用户所拥有时(SymLinksOwnerMatch),才允许访问,这个设置将增加一些安全性,但将耗费Apache大量的资源。