Apache的简单调优

建立WEB服务器,在实际的站点运行中,也许服务器的性能表现会不尽如人意,这就需要分析具体的服务器性能瓶颈并找到解决办法,从而达到一个理想的负载状态,apache硬件以外的调优就要考虑他的工作模式、加载的模块、系统内核参数、以及连接请求等等,在此只做一些常用且简单的调优介绍

apache的调优应从以下几点考虑:

l模块:由于模块会占用一定的内存资源,所以无用的模块建议不装。

l连接状态:由于连接的建立和保持都需要消耗硬件资源,所以为保证硬件性能和访问数相协调,需要对一下数值优化

/proc/sys/net/ipv4/tcp_max_syn_backlog

对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目

/proc/sys/net/ipv4/tcp_syn_retrirs

/proc/sys/net/ipv4/tcp_synack_retries

retries的次数,测试指定次数后确认断开连接,建议改小至2

/proc/sys/net/ipv4/tcp_keepalive_time

/proc/sys/net/ipv4/tcp_keepalive_intvl

/proc/sys/net/ipv4/tcp_keepalive_probes

tcp_keepalive_time为保持回话的时间,

tcp_keepalive_intvl为隔多少秒探针一次,

tcp_keepalive_probes为一共探几次

/proc/sys/net/ipv4/tcp_tw_recycle

/proc/sys/net/ipv4/tcp_tw_reuse

数值设置为1为可回收内存

/proc/sys/net/ipv4/tcp_max_syn_backlog

最大连接请求数(开始建立三次握手,但还没有完成)

/proc/sys/net/core/somaxconn

控制socket listen的队列数

lKeepAlive Off/On 保持连接,会减少三次握手,但是会消耗内存

是否打开,取决于单位时间内是否进行多次连接(三次握手),

一个连接有多次请求的,建议打开,并适当调整KeepAliveTimeout时间

lMPM工作模式:

1、 prefork模式:使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。

2、 worker模式:使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。

MPM中的MinSpareServers和MaxSpareServers

MinSpareServers指令设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。同时不建议调太大。

MaxSpareServers指令设置空闲子进程的最大数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。

打比方apache的进程就是理发店的师傅,MinSpareServers的设置是理发师为一个客户服务,但是又来了其他客人也需要服务是吧,这个就是针对这个情况的。MaxSparServers就是最多有多少个理发师闲着,比如一个普通的理发店,有10000个理发师,很明显不科学,理发师住的地方都不够吧。所以这个值的设置取决于实际情况。当访问量大是应适当调大一点。

简而言之:StartServers的值是只要启动服务就会立即启动几个进程,并尽力保持几到几个空闲服务器运行。进程数的硬性限制由 MaxClients 指定。尽管一个进程能够处理许多相继的请求,Apache 还是会取消连接数超过MaxRequestsPerChild 值以后的进程,来降低内存浪费的情况!

相关推荐