apache工作原理

apache

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

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

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

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

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

223725_bNE8_1786004.png

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量;进而算出可以设置多大的并发量;要根据硬件来进行调整;

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









    


转载于:https://my.oschina.net/u/1786004/blog/280883

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值