文档章节

apache工作原理

murenshan
 murenshan
发布于 2014/06/17 23:48
字数 1182
阅读 441
收藏 12
点赞 0
评论 0

apache

模块化设计的服务,核心只包含主要功能,扩展功能都是通过模块实现的。不同的模块可以被静态的编译进程序,也可以动态加载;

模块的动态加载通过DSO(dynamic shared object)实现;

可以通过apxs进行编译相应的模块;(实验后补)

http 服务器模块化软件;可以选择核心包含的模块,也可以遵循相应格式自己添加模块;

(动态共享对象DSO模块)模块存放位置在modules;可以下载第三方,或者自己编写模块;

log存放的是apache日志文件;配置文件放在httpd.conf;run存放httpd.pid包含apache运行主进程。当然,apache运行有很多进程,只是有个主进程(具体可以看你linux环境下的apache目录结构)

主进程属于apache的控制进程;主进程的所属用户也是以root用户进行运行的;其他子进程主要是以普通用户运行;

真正处理web服务是那些子进程进行处理;

查看模块:httpd -M

查看静态编译入程序的模块:httpd -l

DSO

在linux下运行httpd -M查看apache所有模块;(截图后补)

可以看到有so modules这个静态模块,这个就是DSO功能,只要将这个模块静态编译进来,后面的所有动态模块都能自动编译;也就是具有的DSO动态加载功能了;默认启用;

在linux下运行httpd -l查看静态编译模块(必须的);

MPM

MPM负责实现网络监听、请求的处理等功能,MPM有很多种,目的是为了在不同凭条环境下实现最优化的性能和稳定性;(跨平台;不同的平台处理网络处理接口是不一样的,MPM解决了不同平台使用不同的MPM实现)

linux  ----》prefork  worker          windows---->mpm_winnt;

可以通过httpd -l  或者httpd -V来查看当前apache 使用的MPM;

prefork:

非线程、预生成进程型MPM,prefork会预先启动一些子进程,每个子进程一个时间只能处理一个请求,并且会根据并发请求数量动态生成更多子进程;(默认使用)具体生成多少子进程由httpd.conf进行配置(后补)

在httpd.conf 里面有个prefork.c配置项;进行相应的配置;

对于某些无法保证线程的安全性的话,我们可以使用prefork;<IfModule></IfModule>条件化加载的模块中;

StartServices    服务器启动默认启动的子进程;

MinSpareServers    最小空闲进程数量;

MaxSpareServers    最大空闲进程数量;

(进程在一定情况下需要进行kill,但是又要需要有所保留,以防下次请求,所以,需要设置min和max)

MaxClients              最高的并发量;

ServerLimit              最大限制的并发量;(需要合理设置,查看内存使用量;进行测试再配置)

MaxRequestsPerChild      每个子进程默认最多处理多少个请求。当达到设定值时,这个进程就会被kill掉,重新生成一个新的进程(避免内存泄露等安全性问题,运行太久怕出一些bug,可能出现假死,或者占用太多内存等);

worker:

workder是线程化、多进程的MPM,每个进程可以生成多个线程,每个线程处理一个请求;不需要启用太多的子进程;优点:占用的CPU、内存等服务器资源比较少;缺点:就是效率没有prefork高(具体可以看操作系统原理);prefork占用更多的内存等资源,效率更高;现在的硬件条件都比较充足,一般都使用prefork;

当然,如果需要改变MPM的话,需要重新编译;(MPM都是静态编译的,需要重新编译)

MPM-prefork;

一个进程一个时间只能处理一个请求,更多请求将创建更多进程;

使用watch -n 1 'ps aux | grep httpd'进行周期性的查看;进行变化;

ab进行apache的压力测试;使用ab -c来设置并发请求;ab -c 16 -n 10000 http://192.168.1.10/index.html

以16个并发量进行请求;马上可以看到apache服务器加子进程;以指数级的方式进行增加;当请求消失的话,进程会减少下来;

查看每个进程占用的内存数量:

使用top命令,查看每个apache进程的RES量;进而算出可以设置多大的并发量;要根据硬件来进行调整;

未完待续......................









    


© 著作权归作者所有

共有 人打赏支持
murenshan
粉丝 1
博文 2
码字总数 2201
作品 0
厦门
程序员
[转]知名互联网公司系统工程师面试题

这些问题,对于一名系统工程师或一名运维工程师来说,都是挺好的题目,有兴趣,大家可以试着回答回答。 总共17个题目. GPLV2协议的主要内涵是什么? UNIX,Linux,BSD,Solaris,System V之间的关...

Yisen ⋅ 2011/06/07 ⋅ 0

Apache 2.0性能优化—MPM的选择与配置

  Apache 2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache 1.3,2.0...

范堡 ⋅ 2009/05/06 ⋅ 0

apache worker性能调优

worker的工作原理及配置 相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务...

科技探索者 ⋅ 2017/11/08 ⋅ 0

Mybatis3.4.x技术内幕(十八):Mybatis之动态Sql设计原本(下)

上一篇博文中,简要介绍了Mybatis动态sql的基本用法和基本设计结构,本篇博文重点阐述一些动态sql的技术细节,#{name}和${name}的区别,将在本篇博文中揭晓。也许读者早已了解它们之间的区别...

祖大俊 ⋅ 2016/08/21 ⋅ 1

mod_php对比mod_fastcgi

modphp对比modfastcgi 字数1317 阅读53 评论0 喜欢0 什么是modphp和modfastcgi 在lamp体系中,对于apache端的php的配置,我们最常用的就是mod_php,它把php作为apache一个内置的模块.让apach...

snowing1990 ⋅ 2016/07/07 ⋅ 0

什么是MPM?

MPM(Multi -Processing Modules,多路处理模块)是Apache2.0中影响性能的最核心特性。是Apache 2.x才支持的一个可插入的并发模型,在编译的时候,我们只可以选择一个并发模型 格式 –with-...

范堡 ⋅ 2009/05/18 ⋅ 0

Apache和Nginx运行原理解析

Web服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 应用层使用HTTP协议。 HTML文档格式。 浏览器统一资源定位器(URL)。 Web服务器常常以B/S(Browser...

小杨_Ivan ⋅ 2017/02/09 ⋅ 0

PHP底层工作原理

简介 先看看下面这个过程: 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的; PHP通过modphp5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口); PHP总共...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

在pcDuino上搭建一个简单网站

12.07(ARM版)上搭建的apache 安装过程很简单 打开终端 须藤的apt-get安装的apache2 然后确认安装 的deb http://ports.ubuntu.com/ubuntu-ports/精确主宇宙 中的deb-src的http://ports。 /精...

pc朵拉 ⋅ 2013/07/02 ⋅ 0

[杂记] 关于 Perl 与 Apache

关于Perl~ 最近回过头来看看Perl,这门看似日益沉寂的语言(09年3月TIOBE排行榜已经下滑到了第9的位置),不得不说是别有一番滋味在心头,实际上在我看来这门古老而强大的语言仍然有不少可取...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

x64: TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. ; Last update: 2/1/02 ;.MODEL flat,stdcall x64 not su......

simpower ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 昨天 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 昨天 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部