下面是apache的运行模式的几种:
-
先查看apache的运行模式,查看命令:
httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
-
查看apache的运行模式
httpd -M |grep prefork #这个是运行模式
-
查看apache配置进程数
cat /usr/local/apache2/conf/extra/httpd-mpm.conf #这里面配置
<IfModule mpm_prefork_module>
ServerLimit 1024 #服务器apache最大的进程总数(参考,实际看MaxClients)
StartServers 10 #apache启动时候默认开始的进程数
MinSpareServers 10 #最小的闲置进程数
MaxSpareServers 30 #最大的闲置进程数
MaxClients 1024 #客户端最大的进程总数
MaxRequestsPerChild 300 # 每个进程处理的最多请求数
</IfModule>
-
查看tcp连接数
- 统计80端口连接数
netstat -nat|grep -i "80"|wc -l
netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。 最终返回的数字就是当前所有80端口的请求总数。
- 统计httpd协议连接数或多少个进程数
ps -ef|grep httpd|wc -l
- 查看apache当前并发访问数:
netstat -an | grep ESTABLISHED | wc -l
- 查看Apache的并发请求数及其TCP连接状态:Linux命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 8947 等待足够的时间以确保远程TCP接收到连接中断请求的确认
FIN_WAIT1 15 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN_WAIT2 1 从远程TCP等待连接中断请求
ESTABLISHED 55 代表一个打开的连接
SYN_RECV 21 再收到和发送一个连接请求后等待对方对连接请求的确认
CLOSING 2 没有任何连接状态
LAST_ACK 4 等待原来的发向远程TCP的连接中断请求的确认
其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
TCP连接状态详解
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
客户端TCP状态迁移: CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服务器TCP状态迁移:
CLOSED->LISTEN->SYN_RECEIVE->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
-
apache进程数优化
连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。
1. 查看当前的连接数可以用:
ps aux | grep httpd | wc -l
-
计算httpd占用内存的平均数:
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'
由于基本都是静态页面,CPU消耗很低,每进程占用内存也不算多,大约200K。
服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩1.5G可用,那么理论上可以支持1.510241024*1024/200000 = 8053.06368
约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅)
-
控制最大连接数的MaxClients ,因此可以尝试配置为:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 5500
MaxClients 5000
MaxRequestsPerChild 100
</IfModule>
注意,MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重启httpd时会有提示。
注:以上是我是个人学习了解东西,若有问题请指出谢谢!