分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

Apache三种工作模式

发布时间:2023-09-06 02:04责任编辑:沈小雨关键词:暂无标签
Apache的三种工作模式分别是:prefork、worker、event。

1. prefork模式(默认模式)

profork模式实现了一种非线程、预派生的Web服务器,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个进程出现问题不会影响到其他请求。

2. worker模式

worker模式使用多个子进程,每个子进程有多个线程、由于使用的是线程去处理请求,消耗内存小,适合高流量的请求,但是如果某个进程出现问题,那么这个进程下的线程都会出现问题,即稳定性不是很好。

3. event模式

event模式为了解决keep-alive保持长连接出现的一种工作模式,使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等到超时才会被释放,所以这个时候就出现了event的工作模式。

prefork与worker模式比较

  1. prefork模式使用多个子进程,每个子进程只有一个线程,每个进程在某个确定的时间只能维持一个连接;
  2. worker模式使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,适用于高流量的HTTP服务器上;

总的来说,prefork方式速度要稍高于worker,但是prefork所需要的CPU和Memory资源也稍高于worker。

如何配置模块?

以下主要介绍prefork模式和worker模式

一、prefork模式

1. 编译安装时指定工作模式:

./configure \
--prefix=/usr/local/httpd \
--enable-deflate \
--with-mpm=prefork \ ??????????????#选用prefork模式
--enable-expires \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi

2. 使用httpd -l命令查看当前工作模式

[root@localhost ~]# httpd -l

Compiled in modules:
core.c
mod_so.c
http_core.c
prefork.c ????????????#代表当前为prefork模式

3. 使用lsof命令可以查看Apache进程的运行情况

[root@localhost ~]# lsof -i:80

COMMAND ??PID ??USER ??FD ??TYPE DEVICE SIZE/OFF NODE NAME
httpd ??31239 ??root ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31240 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31241 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31242 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31243 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31244 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31491 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31508 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31511 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31543 daemon ???3u ?IPv4 ?31675 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)

解释如下:有1个root用户运行的主进程,10个daemon用户运行的子进程。这里使用了prefork模式,采用了预派发的方式,10个子进程就是服务器启动时预先创建的,当有用户请求时,将直接使用已经创建好的子进程进行处理,可以减少创建子进程的时间,增加响应速度,预先创建多少个子进程由prefork的参数进行设置。

4. 启动prefork模块,并配置其参数

vim /etc/httpd.conf
#切换到软件目录下cd /usr/local/httpd/conf/extra/#编辑配置文件vim httpd-mpm.conf

prefork参数说明:

  • ServerLimit:最大进程数
  • StartServers:启动的时候创建的进程数量
  • MinSpareServers:最少空闲进程
  • MaxSpareServers:最多空闲进程
  • MaxClients:最多创建多少个子进程用来处理请求
  • MaxRequestsPerChild:每个进程处理的最大请求数,如果达到请求数,进程即被销毁,如果设置为0,子进程永远呢不会结束

5. 再次使用lsof命令可以查看Apache进程的运行情况

[root@localhost extra]# lsof -i :80
COMMAND ??PID ??USER ??FD ??TYPE DEVICE SIZE/OFF NODE NAME
httpd ??31588 ??root ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31589 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31590 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31591 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31592 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31593 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31594 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31595 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31596 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31597 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31598 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31599 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31600 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31601 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31602 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31603 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31604 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31605 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31606 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31607 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??31608 daemon ???3u ?IPv4 ?40709 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)

这样启动Apache服务器时便创建了20个进程,说明配置成功了。

二、worker模式

1. 编译安装时指定工作模式:

./configure \
--prefix=/usr/local/httpd \
--enable-deflate \
--with-mpm=worker \ ???????????????#worker工作模式
--enable-expires \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi

2. 使用httpd -l命令查看当前工作模式

[root@localhost httpd-2.4.2]# httpd -l

Compiled in modules:
core.c
mod_so.c
http_core.c
worker.c ??????????????????#代表当前为worker模式

3. 启动worker模块,并配置其参数

vim /etc/httpd.conf
#切换到软件目录下cd /usr/local/httpd/conf/extra/#编辑配置文件vim httpd-mpm.conf

4. 使用lsof命令可以查看Apache进程的运行情况

 [root@localhost httpd-2.4.2]# lsof -i :80

COMMAND ??PID ??USER ??FD ??TYPE DEVICE SIZE/OFF NODE NAME
httpd ??47560 ??root ???3u ?IPv4 ?50706 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??47561 daemon ???3u ?IPv4 ?50706 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)
httpd ??47562 daemon ???3u ?IPv4 ?50706 ?????0t0 ?TCP localhost.localdomain:http (LISTEN)

worker参数说明:

  • ServerLimit:最大进程数
  • ThreadLimit:每个子进程的最大线程数
  • StartServers:服务器启动时建立的子进程数
  • MaxClients:允许同时接受的最大接入请求数量
  • MinSpareThreads:最小空闲线程数
  • MaxSpareThreads:最大空闲线程数
  • ThreadsPerChild:每个子进程建立的常驻线程数
  • MaxRequestsChild:设置每个子进程在其生存期内允许服务的最大请求数,设置为0,子进程将永远不会结束

具体参数调优这需要对服务器进行负载压力测试后才能确保服务器稳定的基础上实现最高的性能。

常用的性能测试工具有以下几种:ab、http_load、webbench、siege。ab是Apache自带的压力测试工具,非常实用,可以模拟多线程并发请求,测试服务器的负载压力。

在性能调整优化过程中,优化前先使用ab进行压力测试,优化后再进行压力了测试,对比两次测试的结果,看优化效果是否明显,再决定是否启用优化方案。

Apache三种工作模式

原文地址:http://blog.51cto.com/10316297/2141907

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved