Apache的工作模式和Keepalive设置导致的SYN_RECV
2012-12-27 17:48
483 查看
首先说一下Apache的工作模式吧:
prefork–Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。(内存!白菜价)
worker–使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合高流量的http服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。
了解了这些个之后,怎么才能知道你的Apache服务器工作在什么状态呢?使用“apachectl-l”命令就可以显示出来。
由于PHP“至今无法保证其线程安全”,所以一般首选prefork模式。
我们看一下一个典型了prefork模式的参数设置:
<IfModuleprefork.c>
ServerLimit 10000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 1500
MaxRequestsPerChild 0
</IfModule>
有两个主要的参数,MaxClients代表了最大线程数,也就是最大并发连接数。ServerLimit表示连接数上限,默认的MaxClient最大是256个线程,假如想配置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。假如需要更大,则必须编译apache,此前都是无需重新编译Apache。
再说一下SYN_RECV连接状态。
如果Apache的连接数达到了极限,则有可能出现大量的SYN_RECV状态。
可以用
ps -ef|grep httpd|wc -l
来查看Apache的进程数。
用
netstat -an | grep SYN_RECV
来查看SYN_RECV连接状态。
好吧!万一真的是Apache不堪负重了,出现了SYN_RECV 怎么办?
我这里提供一个优化方法可能会化解这个问题,那就是设置
KeepAlive Off
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
这条语句返回结果如下
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
prefork–Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。(内存!白菜价)
worker–使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合高流量的http服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。
了解了这些个之后,怎么才能知道你的Apache服务器工作在什么状态呢?使用“apachectl-l”命令就可以显示出来。
由于PHP“至今无法保证其线程安全”,所以一般首选prefork模式。
我们看一下一个典型了prefork模式的参数设置:
<IfModuleprefork.c>
ServerLimit 10000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 1500
MaxRequestsPerChild 0
</IfModule>
有两个主要的参数,MaxClients代表了最大线程数,也就是最大并发连接数。ServerLimit表示连接数上限,默认的MaxClient最大是256个线程,假如想配置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。假如需要更大,则必须编译apache,此前都是无需重新编译Apache。
再说一下SYN_RECV连接状态。
如果Apache的连接数达到了极限,则有可能出现大量的SYN_RECV状态。
可以用
ps -ef|grep httpd|wc -l
来查看Apache的进程数。
用
netstat -an | grep SYN_RECV
来查看SYN_RECV连接状态。
好吧!万一真的是Apache不堪负重了,出现了SYN_RECV 怎么办?
我这里提供一个优化方法可能会化解这个问题,那就是设置
KeepAlive Off
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
这条语句返回结果如下
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
相关文章推荐
- apache的工作模式 和 最大连接数设置
- apache 工作模式prefork进程模式和worker线程模式参式详解和推荐设置
- Apache的工作模式和最大并发请求数设置
- Apache的工作模式和最大并发请求数设置
- apache的工作模式 和 最大连接数设置
- Apache的工作模式和最大并发请求数设置
- [转贴]apache的prefork和worker工作模式
- WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?
- 设置网卡工作模式
- WebBrowser与IE的关系,如何设置WebBrowser工作在IE9、10、11模式下?
- iis网站的web园的最大工作进程设置后导致session失灵,当进程数大于1,session就失效的解决办法
- Apache HTTP Server 中prefork和worker工作模式(二)
- 1.3 Apache的mpm工作模式
- apache 工作模式
- apache工作模式介绍
- apache 的两种工作模式
- Apache的三种工作模式 及优化配置
- apache的工作模式
- 控件创建后,先设置属性,再添加到页面,导致工作不正常的问题
- apache的工作模式介绍