Apache并发处理模块

apache 2.x版本目前有好几种并发处理模块, 需要在编译的时候通过–with-mpm=xxx指定,常用的并发处理模式是prefork和worker。prefork这种模式比较古老,纯进程并发,没有线程,处理方式跟apache1.x是一样的,适用于那些没有线程库或者不想使用线程的服务器;worker是多进程多线程的模式,在worker模式下,有一个唯一的父进程(控制进程),这个父进程会根据需要生成若干子进程,每个子进程会有一个监听线程和若干个服务线程(每个子进程的服务线程数目都是固定的,由ThreadsPerChild指定),监听线程负责监听客户端请求并把它们交给服务线程处理。理论上worker模式的性能会比prefork模式优秀,处理同样多的请求的时候占用的资源会比prefork少。

按照官方文档说法:

The server can be better customized for the needs of the particular site. For example, sites that need a great deal of scalability can choose to use a threaded MPM like worker or event, while sites requiring stability or compatibility with older software can use a prefork.

worker

This Multi-Processing Module (MPM) implements a hybrid multi-process multi-threaded server. By using threads to serve requests, it is able to serve a large number of requests with fewer system resources than a process-based server. However, it retains much of the stability of a process-based server by keeping multiple processes available, each with many threads.

prefork

This Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server that handles requests in a manner similar to Apache 1.3. It is appropriate for sites that need to avoid threading for compatibility with non-thread-safe libraries. It is also the best MPM for isolating each request, so that a problem with a single request will not affect any other.

worker模块的配置参数:

ThreadsPerChild每个子进程的服务线程数目默认值25
StartServersapache启动的时候就开启的子进程数默认值3
MinSpareThreads最小空闲线程数默认值75
MaxSpareThreads最大空闲线程数,apache在运行的时候会让总的空闲线程数保持在MinSpareThreads和MaxSpareThreads之间,这两个参数用默认值就可以了,一般情况下没必要去调整它们默认值250
MaxClients最大客户端并发处理数(最大线程数),MaxClients除以ThreadsPerChild得到的值的就是最大可能达到的子进程数,如果服务器的并发请求数超过了MaxClients,那么apache会报这样的错误:server reached MaxClients setting, consider raising the MaxClients setting默认值16*25 = 400
ServerLimit最大进程数限制,这个参数值必须大于或等于MaxClients除以ThreadsPerChild得到的值。这个参数是硬限制,直接重启apache(apache restart)不会生效,必须先停止apache(apache stop)再启动apache(apache start)才生效worker模式下默认值是16,prefork模式则是256
ThreadLimit每个进程的最大线程数限制,也就是说这个参数决定了ThreadsPerChild的最大值。如果这个参数设得比ThreadsPerChild大很多的话,那么会浪费掉很多共享内存。设置过大还可能会导致apache无法启动或者系统不稳定。这个参数也是硬限制。如果要设置的话,ServerLimit和ThreadLimit必须放在其它设置的前面默认值64
MaxRequestsPerChild单个子进程在其生命周期内处理的总请求数限制,当某个子进程处理过的总请求数到达这个限制后这个进程就会被回收,如果设为0,那么这个进程永远不会过期(这样如果有内存泄露的话就会一直泄露下去……)

--------------------------------------------------------


apache有三种运行模式:

1, prefork MPM;

2, worker MPM;

3, perchild MPM.


prefork MPM

管理员应选择prefork MPM来实施基于进程的Web服务器。虽然基于进程的服务器有一些速度较慢的性能,它们通过模块来提供稳定性和兼容性,这些模块不支持线程。为了改进性能,服务器的父进程fork多个子进程并使它们能够用于应答请求。当接收到请求时,服务器把其分配给子进程。如果没有子进程可用,服务器创建新的子进程并把它添加到库中。但是,子进程的创建会导致延迟。当配置这一MPM时,管理员可以限制启动时可以创建的子进程数、最大的子进程数等。这一MPM有利于形成一个稳定的Apache服务器,但同时会影响性能和占用内存,因为单个进程的大小会占很大一部分。

The worker MPM

为了实施混合服务器,管理员可以选择worker MPM,它提供比prefork MPM更卓越的可靠性、故障恢复能力和可扩展性。启动时父进程创建规定数量的子进程,反过来每个子进程包含多个线程。每个子进程中只有一个线程聆听网络,它简化了程序代码,减少了进程之间的协作,从而提高性能。虽然这一MPM稳定且性能优于prefork,由于它是基于线程,与其一同使用的所有模块都必须是完全的线程-安全。大多数Apache 1.3模块不是线程安全,并且由于worker MPM不向后兼容,因此,使用这一MPM的管理员也不能一同使用Apache 1.3模块和Apache 2.0。但是使用prefork MPM来编译服务器允许管理员使用Apache 1.3模块。


The perchild MPM

如果遇到这样一种情况,考虑到安全性和性能,需要Apache进程基于不同的用户ID来运行,管理员可以使用perchild MPM 来编译混合服务器。互联网服务供应商(ISP)通常使用这一MPM来实现虚拟托管。当perchild启动时,它创建规定数量的进程,每个进程有规定数量的线程和专用的用户ID。如果服务器上的负载增加,它使用现有进程之一来创建新线程,而不是创建新进程。这种MPM是最可扩展,但也最不可靠。

转载于:https://www.cnblogs.com/preftest/archive/2011/06/26/2090637.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

头文件定义全局变量_5.2 C++局部变量与全局变量 | 输出局部全局变量

C局部变量C局部变量是指:在一个函数内部定义的变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它,在此函数以外是不能使用这些变量的。同样,在复合语句中定义的变量只在本复合语句范围内有效,…

java float转换成long_在Java中如何将float转换为long或int数据类型?

float f1.2f;double dDouble.parseDouble(String.valueOf(f));System.out.println(d);直接转换会设计到精度问题,所以需要借助字符串 保证不丢失数据www.shufadashi.com防采集。楼主您好,如果float是个整数,强制转换即可,可以捕捉…

Spark 1.2 发布,开源集群计算系统

2019独角兽企业重金招聘Python工程师标准>>> Spark 1.2 发布,此版本包括 172 位贡献者和超过 1000 个 commits。 此版本包括 Spark 核心操作和性能改进;添加新的网络传输子系统,进行了较大的改进;Spark SQL 引入了一个…

[转载].SSRAM、SDRAM和Flash简要介绍

转CalmBright兄的博文:http://www.cnblogs.com/CalmBright/archive/2009/07/19/1526569.html Abstract 在用NIos II 调试sdram遇到了其容量计算的问题,现介绍如下 Introduction 问题1:什么是DRAM、SRAM、SDRAM? 答:名词…

调整 Docker 中 nginx 的日志级别

调整 Docker 中 nginx 的日志级别Intro最近发现我们的一个应用产生了很多日志,而这些日志大多都是 nginx 的 access_log,我们默认会把标准输出收集到 es 里分析应用日志,但是很多都是 access_log 就可能会掩盖掉真实的错误日志,所…

Oracle B-Tree Index 原理

一. B-Tree Index 原理 官网说明: No index structure can satisfy all needs, but the self-balancing B-tree index comes closest to optimizing the performance of searches on large sets of data. Each B-tree node holds multiple keys and pointers. The m…

曾改变世界的最强科学,为什么我们对它的误解却越来越多?

古往今来,我们评价一个人有学识,总是形容:“上知天文下知地理”。也会要求一个人“读万卷书,行万里路”。美国认知心理学家Nora S. Newcombe认为:孩子常常看地图、爱看地图,能提高他们的空间想象力&#xf…

java语言程序设计一_java语言程序设计(一)-1

java 语言的特点是:强类型,制定了比较多的语言规范,尽可能在编译阶段检测出更多的错误及警告。编译和解释,首先将源代码编译成codebyte,运行时,java的运行系统装载和链接需要执行的类,并做必要的…

oracle 创建自增列及其oracle表的字段的子节点的查询

首先创建序列: create sequence 序列名 start with 1 increment by 1 nomaxvalue nocycle 其次创建触发器: create or replace trigger 触发器名 before insert on 表名称 for each rowbeginselect 序列名.nextval into:new.表的列名 from dual;end;…

多线程环境下,程序真是危机四伏

姿势在不断的更新迭代, 太卷了。你管这也叫线程安全?最近大意了,竟然想将《面试官:实现一个带值变更通知能力的Dictionary》一文中的临界锁只应用到写操作。内心旁白:读操作又不会修改数据,无论是新值还是旧…

眼见不一定为实!18个神奇的视错觉,看完不相信眼睛系列

全世界只有3.14 % 的人关注了爆炸吧知识来源:普象工业设计小站在家长时间网上冲浪总有时候感觉眼睛出了毛病不信,你看为啥这个明明是个三棱锥怎么突然变成了正方体我是“瞎”了么啊啊啊啊后来,去找了资料才发现这原来是一家幻觉博物馆的展品玩…

怎么用java ee编程_Java EE应用程序入门 - 编程入门网

Java EE应用程序入门时间:2011-07-06 netbeans.org本文将详细介绍使用 EJB 3.0 技术开发企业应用程序的基础知识,而 EJB 3.0 是 Java EE 5 平台的组成部分。本文还将阐述如何通过 EJB 3.0 技术简化开发企业应用程序的流程。本文使用的是 NetBeans IDE 6.0 发行版。先…

vb6 由于超出容量限制 不能创建新事务_分布式限流?你也能轻松玩转(没啥新技术)...

点击蓝色「日拱一兵」关注,持续侦破 Java 技术案件一、什么是限流?为什么要限流?不知道大家有没有做过帝都的地铁,就是进地铁站都要排队的那种,为什么要这样摆长龙转圈圈?答案就是为了限流!因为…

Managing Gigabytes--文本压缩

开门见山,文本压缩可以归纳为两大类, 符号方法和字典方法, 下面分别介绍下: 1)符号方法,symbolwise method普通编码方式是每个字符都采用相同位数编码, 比如asc码, 每个字符都是8位编码。那么现…

Linux学习笔记 1 环境变量 2 vi命令

1 环境变量篇 1.1 修改 查看 生效 系统环境变量 1 涉及系统环境变量的文件 --> .bash_profile --> /etc/profile 2 该文件位置 /root/.bash_profile 3 文件编辑器打开 vi .bash_profile 4 文件末尾加入 JAVA_HOME /usr/share/jdk 1.6.0 PATH $JAVA_HOME/bin:$PA…

一个简单的存储过程

存储过程实现循环取出以特定字符间隔的字符串的单个字符串比如:ab,cdsfd,efdf,owoief,lows实现存储过程后的结果为:abcdsfdefdfowoieflows 这样就可以对这些数据进行循环执行操作 存储过程:if exists(select * from sysobjects where namepro…

基于事件驱动架构构建微服务第8部分:在应用程序上实现事件溯源

原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part8-implementing-eventsourcing-on-application/在本文中,我将讨论应用程序上的事件溯源实现。该层围绕领域并实现用例(特定于应用程序的业务规…

我们来聊点成年人的话题!

1 这个话题透漏着成年人都存在的问题,其中心思想行走在道德底线,让人不得不深思,句句入心2 哈哈哈哈哈哈哈哈哈哈哈哈哈画面惊人 图自动漫次元酱3 对不起,我不是你家的鸡,我是一只大鸟!!&#x…

python3 csv读写_在python3中读取、更新和写入更新的CSV文件

我正在创建一个应用程序来本质上充当一个资产数据库,我试图打开一个CSV文件,读取值并相应地更新它们。我看到很多关于如何读写CSV文件的教程,但是我找不到一个详细介绍如何迭代CSV文件和更新单个值的教程。理想情况下,与列表相比&…

js数字相加

las_number Number(ads) Number(abs),转载于:https://www.cnblogs.com/gengaixue/archive/2011/07/08/2100971.html