apache 工作模式
为什么会有工作模式?
更高效率的支持不同的平台;能更好的为有特殊要求的站点定制。
例如,要求 更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event; 需要可靠性或者与旧软件兼容的站点可以使用 prefork。
有几种工作模式?
| perfork [默认] | 多个子进程方式处理每个请求。 [预派生][占内存大]适合于没有线程安全库,需要避免线程兼容性问题的系统。 用单独的子进程来处理不同的请求,进程之间是彼此独立的,最稳定的MPM之一。 |
| worker [--with-mpm-worker] | 多进程多线程来进行处理请求 多线程:处理海量请求,系统资源的开销小[高流量http服务器];多进程:稳定性 每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。 |
| event | 把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限制,此时Event MPM方式是最有效的。 |
| NetWare | NetWare |
| OS/2 | OS/2 |
| WinNT | Windows |
查看工作模式 httpd –l 、apachectl -l
[root@centos1 bin]#Compiled in modules:
core.c
mod_so.c
http_core.c
worker.c # 显示哪个就是哪种模式,现在为worker的工作模式
参数解释
# prefork MPM
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
perfork模式:使用单独的子进程来处理每个请求
# StartServers: 服务启动时建立的server进程数
# MinSpareServers: 空闲server进程的最小数
# MaxSpareServers: 空闲server进程的最大数
# MaxRequestWorkers: 允许启动的最大server进程数
# MaxConnectionsPerChild: 每个server进程在生存期允许伺服的最大请求数
prefork控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止[预派生]。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。
_CC______............K...C...C.WK...K.........................C. ...K............................................................ ................................................................ ................................................................ 256个
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
Srv :Child Server number - generation
PID:OS process ID
Acc:Number of accesses this connection / this child / this slot
M:Mode of operation
CPU:CPU usage, number of seconds
SS:Seconds since beginning of most recent request
Req:Milliseconds required to process most recent request
Conn:Kilobytes transferred this connection
Child:Megabytes transferred this child
Slot:Total megabytes transferred this slot
# worker MPM
<IfModule mpm_worker_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
# worker MPM
# StartServers: 服务启动时建立的server进程数
# MinSpareThreads: 空闲的工作线程最小数
# MaxSpareThreads: 空闲的工作线程最大数
# ThreadsPerChild: 每个进程可建立的工作线程数
# MaxRequestWorkers: 最大的工作线程数 ps -ef|grep http|wc -l
# MaxConnectionsPerChild:每个sever进程生存期允许伺服的最大请求数
Worker由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样, 为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxRequestWorkers设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。如果MinSpareThreads、MaxSpareThreads相等,MaxSpareThreads为MinSpareThreads+1。MinSpareThreads为主。
prefork、worker模式切换
先在 /usr/sbin 下进行:mv httpd httpd.prefork
mv httpd.worker httpd
然后在 apache2 下,/usr/local/apache2/conf 下的 httpd.conf 增加
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 30
MaxSpareThreads 70
ThreadsPerChild 30
MaxRequestsPerChild 0
</IfModule>
然后在 /usr/local/apache2/bin 下 执行:httpd –l
查看 server-status,起进程 一个进程下是30个线程。
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
##2*25, M+N=50
StartServers 3
MaxClients 150
MinSpareThreads 75
MaxSpareThreads 75
ThreadsPerChild 30
MaxRequestsPerChild 0
##90
StartServers 3
MaxClients 150
MinSpareThreads 75
MaxSpareThreads 75
ThreadsPerChild 30
MaxRequestsPerChild 0
##
StartServers 2
MaxClients 150
MinSpareThreads 60
MaxSpareThreads 120
ThreadsPerChild 30
MaxRequestsPerChild 0
2* 30:1busy 59个空闲
minsparethreads为60不够,现在为59个线程。要加个进程,有30个线程 所以后来变成了 90!
##
StartServers 4
MaxClients 150
MinSpareThreads 60
MaxSpareThreads 90
ThreadsPerChild 30
MaxRequestsPerChild 0
4*30=120
最小的为min60够了
最大的 为max空闲为90,就把多的线程程杀掉【杀进程】(ThreadsPerChild整数倍 )
浙公网安备 33010602011771号