首页 > 其他分享 >如何判断Apache服务器的工作模式

如何判断Apache服务器的工作模式

时间:2023-06-21 22:37:34浏览次数:53  
标签:worker number 模式 进程 线程 MaxRequestsPerChild Apache 服务器 空闲

如何才能知道当前的apache2使用什么工作机制?我们可以通过httpd -l命令列出apache的所有模块,就可以知道其工作方式:

 

prefork 工作模式 

如果httpd -l列出prefork.c。则表示是 prefork 工作方式。 如下面所示:

Compiled in modules:     
  core.c     
  prefork.c     
  http_core.c     
  mod_so.c

这表明当前apache2的工作方式是 prefork

 

对于 prefork 工作模式的 apache 来说,在 httpd.conf 中对它的设置是在

# prefork MPM    
# StartServers: number of server processes to start     
# MinSpareServers: minimum number of server processes which are kept spare     
# MaxSpareServers: maximum number of server processes which are kept spare     
# ServerLimit: maximum value for MaxClients for the lifetime of the server     
# MaxClients: maximum number of server processes allowed to start     
# MaxRequestsPerChild: maximum number of requests a server process serves     
<IfModule prefork.c>     
StartServers       8     
MinSpareServers    5     
MaxSpareServers   20     
ServerLimit      256     
MaxClients       256     
MaxRequestsPerChild  4000     
</IfModule>ServerLimit


默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。
如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。
生效前提:必须放在其他指令的前面

StartServers
指定服务器启动时建立的子进程数量,prefork默认为5。

MinSpareServers
指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,
那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。

MaxSpareServers
设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。
此参数不要设的 太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″。

MaxClients
限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,
队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。

MaxRequestsPerChild
每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。
如果 MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。


按照前面的设置,在该工作模式下,服务器启动后起动8个httpd进程(加父进程共9个,通过 ps -ax|grep httpd命令可以看到)。
当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork(复制)一个子进程。
直到内存中的空闲进程达到MaxSpareServers。该模式是为了兼容一些旧版本的程序。缺省编译时的选项。

 

worker 工作模式

如果httpd -l列出worker.c ,类似如下,则表示是 worker 工作模式

Compiled in modules:   
  core.c    
  worker.c    
  http_core.c    
  mod_so.c

这时候的配置文件如下:

# worker MPM   
# StartServers: initial number of server processes to start    
# MaxClients: maximum number of simultaneous client connections    
# MinSpareThreads: minimum number of worker threads which are kept spare    
# MaxSpareThreads: maximum number of worker threads which are kept spare    
# ThreadsPerChild: constant number of worker threads in each server process    
# MaxRequestsPerChild: maximum number of requests a server process serves    
<IfModule worker.c>    
StartServers         2    
MaxClients         150    
MinSpareThreads     25    
MaxSpareThreads     75     
ThreadsPerChild     25    
MaxRequestsPerChild  0    
</IfModule>StartServers


服务器启动时建立的子进程数,默认值是”3″。

MaxClients
允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是”400″ ,
16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。

MinSpareThreads
最小空闲线程数,默认值是”75″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。

MaxSpareThreads
设置最大空闲线程数。默认值是”250″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。
MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:
worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和。

ThreadsPerChild
每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。

MaxRequestsPerChild
设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。

该模式是由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。
服务器在启动时启动两个进程,每个进程产生的线程数是固定的 (ThreadsPerChild决定),因此启动时有50个线程。
当50个线程不够用时,服务器自动fork一个进程,再产生25个线程。

 

参看:

Apache服务器的优化之模式设置
http://www.phpq.net/apache/apache-server-optimization.html

apache2.0 prefork和worker模块性能调优

apache的prefork和worker工作模式
http://hi.baidu.com/%C7%E0%B4%BA%B5%C4%BA%E3%D0%C4/blog/item/07d314a4aba0eb98d04358fe.html

Apache的prefork模式和worker模式
http://www.ccvita.com/339.html

CentOS+Apache+Mysql+Php安装及优化配置小记
http://liang831002.blog.51cto.com/188904/88422

标签:worker,number,模式,进程,线程,MaxRequestsPerChild,Apache,服务器,空闲
From: https://blog.51cto.com/u_15588078/6532196

相关文章

  • ubuntu 启用apache运行状态信息查看
    ubuntu下安装apache后,默认apache的配置文件都在/etc/apache2/目录下。而其中允许查看apache运行状态的配置默认是在/etc/apache2/mods-available/status.conf文件中配置的。这个文件的默认配置类似如下:<IfModulemod_status.c>##Allowserverstatusreportsgenerate......
  • Apache 地址重写简单介绍
    一、为何需要地址重写网页地址变化,SEO需要更友好的地址,域名变化,等等情况下,为了让客户受尽了少的影响,最好的办法就是地址重写。 二、在那里重写1、在Apache主配置文件httpd.conf中;以我本地XAMPP为例,就是要修改下面配置文件:D:\xampp\apache\conf\httpd.conf;2、在httpd.conf里定义......
  • 手动配置Ubuntu 指定DNS服务器地址
    Ubuntu使用文件"/etc/resolv.conf"文件配置DNS服务器的地址,可通过nameserver配置项设置DNS服务器的IP地址,最多可以使用3个DNS服务器。sudogedit/etc/resolv.conf修改为以下信息:#GeneratedbyNetworkManagernameserver8.8.8.8nameserver8.8.4.4对"resolv.conf"的修改......
  • git 强制回退服务器上的commit
    假设你有3个commit如下:commit3commit2commit1 其中最后一次提交commit3是错误的,那么可以执行:gitreset--hardHEAD~1你会发现,HEADisnowatcommit2。 然后再使用gitpush–force 将本次变更强行推送至服务器。这样在服务器上的最后一次错误提交也彻底消失了。值得......
  • 深入了解ApacheZeppelin:如何构建高效的数据科学平台
    目录引言随着数据科学和人工智能的快速发展,如何构建高效的数据科学平台已经成为一个重要议题。ApacheZeppelin是一个开源的数据科学平台,其提供了一种简单、高效的方式来处理和存储数据,并且具有高度可定制性和灵活性。在本文中,我们将深入探讨ApacheZeppelin的技术原理、实现......
  • 搭建一个自用的端到端加密服务器 - 以 Matrix-Conduit 为后端
    Conduit是一个用Rust编写的、支持基础的Matrix协议的服务器后端。不建议用在生产环境中,因为功能真的很少,只支持基础的加密聊天、语音视频、文件分享,文档又少。如果买了小内存机、想弄一个自用的端到端加密聊天服务器的可以试试。注意:它要求glibc版本在2.29以上,所以至......
  • 【paramiko】基于paramiko封装SSH连接服务器执行命令
    1、官方文档paramiko·PyPIWelcometoParamiko’sdocumentation!—Paramikodocumentation 2、安装pipinstallparamiko 3、示例importparamiko#建立一个sshclient对象ssh=paramiko.SSHClient()#将信任的主机自动加入到host_allow列表,须放在connect......
  • linux下安装Ipmi工具,调整服务器CPU风扇速度.
    安装ipmi工具yum-yinstallipmitool加载模块modprobeipmi_si&&modprobeipmi_devintf&&modprobeipmi_msghandler查看模块lsmod|grepipmi开启风扇控制设置风扇为手动模式ipmitoolraw0x300x300x010x0000为手动模式01为自动模式设置CPU风扇转速ipmit......
  • docker-compose多服务器部署kafka集群
    Kafka是一个开源的分布式事件流平台,依赖Zookeeper或者KRaft,本文基于Zookeeper。服务器IP配置本文使用三个服务器来做集群搭建,IP如下:nodeNameIPnode110.10.210.96node210.10.210.97node310.10.210.98部署zookeeper工作目录为/home/zookeepernode1......
  • 创建基本的web服务器
    先搭建基本web服务器平台先引入一个http模块consthttp=require('http')创建web服务器实例constserver=http.creatServer()为服务器实例绑定一个request事件,监听客户端的请求server.on('request',function(req,res){console.log('Someonevisitourwebserve......