Article ID: 113007, created on May 24, 2013, last review on May 7, 2014

  • Applies to:
  • Plesk 12.0 for Linux

解决方案

Prefork:
 
每个 prefork MPM 模式使用多个子进程和一个线程。 每个进程一次处理一个连接。 在多个系统上,prefork 在速度上可与 worker 相较,但是会使用更多内存。 Prefork 是无线程设计在一些情况下优于 worker: 可用于非线程安全的第三方模块,更容易使用较低线程调试支持在平台上进行调试。
 
    * 在 Apache 1 中开发
    * 多个子进程,每个子进程 1 个线程,子进程处理请求
    * 隔离和稳定性更好
    * 已经过测试能与 Parallels Plesk Panel 一起正常运行
   
缺点
* 与线程 MPMs
 
Worker 相比内存消耗更多的性能更低:
 
每个 worker MPM 模式使用多个子进程和多个线程。 每个线程一次处理一个连接。 Worker 是高流量服务器的更佳选择因为其内存占用比 prefork MPM 更少。
 
    * 除了 prefork 模块在 Apache 2 中开发
    * 多个进程,每个进程多个线程,线程处理请求
    * 使用更少内存交付更高性能
   
缺点
* 不会像基于进程的 MPM 一样提供相同水平的请求隔离
* 如果单个线程被挂起/失去控制,整个进程都会被终止,会影响所有线程。
* 要求一个线程安全的处理器来处理动态内容
* Parallels Plesk Panel 不支持
 
每个模块在 Apache webserver 配置文件中都有一组不同的配置指令:
 
Prefork:
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

 Worker:
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>



信息:

在 RedHat-based Linux 版本中,配置 Apache webserver 默认运行 prefork 模块。 通常您也可以切换至 "worker",如果您觉得这个模块更适合你的话,但是要记住以下警告。

警告: Parallels Plesk Panel 并未通过与 Apache MPM worker 一起运行的测试,将其安装在 Debian/Ubuntu 将会导致 'psa' 程序包被移除。

如果您仍想要切换至 "worker" 模块,无需对 /etc/sysconfig/httpd 文件中的该指令添加任何注释:
# grep HTTPD= /etc/sysconfig/httpd
#HTTPD=/usr/sbin/httpd.worker
并重启 Apache:
/etc/init.d/httpd restart

 注意 worker MPM 会假定一个由 Apache webserver 配置/加载的一个特殊的 PHP 模块:
# cat /etc/httpd/conf.d/php.conf|grep -A3 "worker.c"
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>



最后,客户和工程师常问的问题是: 如何确定服务器运行的是哪个 MPM 模块?
 
首先使用 ps 工具确定运行 Apache 进程的命令行:
# ps aux | grep -v grep | egrep "apache|httpd"
root      1684  0.0  1.4 284484 14888 ?        Ss   17:52   0:00 /usr/sbin/httpd
apache    3101  0.0  0.7 284484  7596 ?        S    18:02   0:00 /usr/sbin/httpd

 并通过以下命令查看其运行的模块:
# /usr/sbin/httpd -l | egrep "prefork|worker"

  另外,查看 /etc/sysconfig/httpd 配置文件:
# grep -B 5 HTTPD= /etc/sysconfig/httpd
# The default processing model (MPM) is the process-based
# "prefork" model. A thread-based model, "worker," is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
#HTTPD=/usr/sbin/httpd.worker

其他信息

 Apache MPM prefork

Apache MPM worker

 

a914db3fdc7a53ddcfd1b2db8f5a1b9c 29d1e90fd304f01e6420fbe60f66f838 56797cefb1efc9130f7c48a7d1db0f0c 2a5151f57629129e26ff206d171fbb5f e335d9adf7edffca6a8af8039031a4c7

Email subscription for changes to this article