pqwsa 发表于 2018-11-27 08:51:39

apache的多线程多进程的多路处理模块

参考如下内容:  Apache MPM worker
  说明
  支持混合的多线程多进程的多路处理模块
  状态
  MPM
  模块名
  mpm_worker_module
  源文件
  worker.c
  概述
  此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
  控制这个MPM的最重要的指令是,控制每个子进程允许建立的线程数的
  ThreadsPerChild
  指令,和控制允许建立的总线程数的
  MaxClients
  指令。

  工作方式
  每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立
  ThreadsPerChild
  数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。
  Apache总是试图维持一个备用(spare)或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的建立即可得到处理。初始化时建立的进程数量由
  StartServers
  指令决定。随后父进程检测所有子进程中空闲线程的总数,并新建或结束子进程使空闲线程的总数维持在
  MinSpareThreads
  和
  MaxSpareThreads
  所指定的范围内。由于这个过程是自动调整的,几乎没有必要修改这些指令的缺省值。可以并行处理的客户端的最大数量取决于
  MaxClients
  指令。活动子进程的最大数量取决于
  MaxClients
  除以
  ThreadsPerChild
  的值。
  有两个指令设置了活动子进程数量和每个子进程中线程数量的硬限制。要想改变这个硬限制必须完全停止服务器然后再启动服务器(直接重启是不行的),
  ServerLimit
  是活动子进程数量的硬限制,它必须大于或等于
  MaxClients
  除以
  ThreadsPerChild
  的值。
  ThreadLimit
  是所有服务线程总数的硬限制,它必须大于或等于
  ThreadsPerChild
  指令。这两个指令必须出现在其他
  worker
  MPM指令的前面。
  在设置的活动子进程数量之外,还可能有额外的子进程处于"正在中止"的状态但是其中至少有一个服务线程仍然在处理客户端请求,直到到达
  MaxClients
  以致结束进程,虽然实际数量会很小。这个行为能够通过以下禁止特别的子进程中止的方法来避免:

[*]将  MaxRequestsPerChild
  设为"0"
[*]将  MaxSpareThreads
  和
  MaxClients
  设为相同的值
  一个典型的针对
  worker
  MPM的配置如下:
  ServerLimit 16
  StartServers 2
  MaxClients 150
  MinSpareThreads 25
  MaxSpareThreads 75
  ThreadsPerChild 25
  在Unix中,为了能够绑定80端口,父进程一般都是以root身份启动,随后,Apache以较低权限的用户建立子进程和线程。
  User和Group
  指令用于设置Apache子进程的权限。虽然子进程必须对其提供的内容拥有读权限,但应该尽可能给予它较少的特权。另外,除非使用了
  suexec
  ,否则,这些指令设置的权限将被CGI脚本所继承。
  参考如上内容(来自http://apache.chinahtml.com/mod/worker.html),可以实现apache混合的多线程多进程的多路处理,重新编译apache2
  ./configure --with-mpm=worker
  make
  make install
  在apache配置文件中加入如下内容
  ServerLimit 16
  StartServers 2
  MaxClients 150
  MinSpareThreads 25
  MaxSpareThreads 75
  ThreadsPerChild 25
  这样就可以了.
  如果您在重新编译时遇到,编译错误
  undefined reference to `ap_thread_stacksize' ...
  请在configure 前先执行 make distclean
  (完)
  本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66496/showart_697141.html

页: [1]
查看完整版本: apache的多线程多进程的多路处理模块