apache和nginx工作模式

apache的MPM模块
不同的操作系统默认使用不同的MPM

 

Netware

mpm_netware

OS/2

mpmt_os2

Unix      

prefork,worker 或 event,取决于平台特性

Windows    

mpm_winnt

这里只讨论一下linux相关的 prefork,worker和event
要求 更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event; 需要可靠性或者与旧软件兼容的站点可以使用 prefork。

prefork模块
apache会在启动的时候预先维护几个空闲或备用的进程,这些进程已经随时可以提供服务,通过这种方式
客户端不需要因为等待子进程被fork而降低用户体验
相关的调节性能参数

# prefork MPM
# StartServers: 服务开启时默认启动的工作进程数,不包括主进程
# MinSpareServers: 最小空闲进程数,如果少于设置的数量,父进程会创建新的子进程,并且产生的速度是
                   第一秒1个 第二秒2个,第三秒4个 以指数形势增长,直到每秒产生32个子进程,
                   只有满足设置的数量才会停止创建子进程
# MaxSpareServers: 最大空闲进程数,空闲的进程是不处理请求的进程,如果存在多余设置的值,父进程
                   会主动终止多余的子进程
# MaxRequestWorkers: 并发请求的最大数,一条进程最多能处理多少个请求
# MaxConnectionsPerChild: 每个子进程在生命周期内所能够服务的最多请求个数
默认的设置
<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

worker模块
这是一个多进程多线程的混合的模式,她也会预先fork一些子进程,然后每个子进程创建一些线程,当请求过来的时候,
会分配线程来提供服务,因为线程会更轻量所以在高并发的场景这个模式会用的比较多
相关的调节参数

# worker MPM
# StartServers: apache启动时候创建的子进程数量
# MinSpareThreads: 最小空闲线程数,如果服务
                   器中没有足够的空闲线程,则会创建子进程,直到空闲线程数量大于设定值
# MaxSpareThreads: 最大空闲线程数
# ThreadsPerChild: 该指令设置每个子进程创建的线程数
# MaxRequestWorkers: 每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定
# MaxConnectionsPerChild:一个子进程最大处理的连接数
默认的设置
   <IfModule mpm_worker_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250 
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>       

event模块

event是基于worker的一个模块,一个父进程启动子进程,每个子进程根据ThreadsPerChild的值创建固定数量的线程,尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,他可以将keepalive的连接转移到监听的线程,如果有新的请求过来,将会转发到第一个可用的线程,这样就可以缓解由于keepalive服务器繁忙而线程耗尽的问题,注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用。还有,需要补充的是HTTPS的连接(SSL),它的运行模式仍然是类似worker的方式,线程会被一直占用,直到连接关闭。

# event MPM
# StartServers: apache启动时候创建的子进程数量
# MinSpareThreads: 最小空闲线程数,如果服务器中没有足够的
                   空闲线程,则会创建子进程,直到空闲线程数量大于设定值
# MaxSpareThreads: 最大空闲线程数
# ThreadsPerChild: 该指令设置每个子进程创建的线程数
# MaxRequestWorkers: 每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定
# MaxConnectionsPerChild:一个子进程最大处理的连接数
<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

 

Nginx的工作原理

 

 

NGINX有一个主进程和一个或多个工作进程。如果缓存被启用,缓存加载器和缓存管理器进程也启动时运行。主进程的主要目的是读取和评估配置文件,并维护工作进程。工作进程执行请求的实际处理。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、 cache loader和cache manager均应以非特权用户身份运行。NGINX依靠依赖操作系统的机制来有效地在工作进程中分配请求。工作进程的数量由nginx.conf配置文件中的worker_processes指令定义,可以设置为固定值,也可以配置为自动调整为可用CPU核心数。

Nginx支持多种连接处理方法select,poll,epoll,kqueue,/dev/poll,eventport

 

参考:unix网络编程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于ApacheNginx和Tomcat这三种服务的配置和使用,以下是一些基本的概述: 1. Apache HTTP服务器(常称为Apache)是一个免费开源的Web服务器软件,可以在多种操作系统上运行。它可以通过配置文件进行灵活的配置。常见的配置文件是httpd.conf。一些基本的配置包括监听端口、虚拟主机、目录别名等。Apache还支持模块化的架构,可以通过加载和配置不同的模块来扩展其功能,比如SSL模块、Rewrite模块等。 2. Nginx是一个高性能的HTTP和反向代理服务器,也可以用作负载均衡器和缓存服务器。与Apache不同,Nginx采用事件驱动和异步非阻塞的工作方式,可以处理大量并发连接。Nginx的配置文件是nginx.conf。一些常见的配置包括监听端口、服务器块、代理设置等。Nginx还支持许多高级功能,如SSL/TLS终止、URL重写、反向代理等。 3. Tomcat是一个Java Servlet容器,用于运行Java Web应用程序。它可以作为独立的Web服务器或与其他Web服务器(如Apache)集成。Tomcat的配置文件是server.xml。一些常见的配置包括端口号、虚拟主机、连接器设置等。Tomcat还支持通过web.xml文件配置Servlet和过滤器,以及通过context.xml文件配置上下文参数。 以上是对ApacheNginx和Tomcat服务的简要介绍和配置概述。具体的使用和更高级的配置取决于你的需求和具体的场景。你可以根据自己的需要进一步了解和深入学习这些服务的配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值