web架构之Apache网页的深入优化(内含工作模式与优化,目录属性与优化,ab压力测试与优化)


前言

  • Apache的默认配置可以保证基本运行服务,但是在生产环境中,有时候需要把服务器性能发挥到最大,此时,需要我们进行深入优化
  • 深入优化包括对服务器进行压力测试,然后对相应数据进行优化,以便充分发挥服务器的作用

一、event模式与优化

1.1:event工作模式概述

event是Apache最新的工作模式,它和worker模式很像不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题
event工作模式在遇到某些不兼容的模块时,会失效,将会回退到worker模式
event工作模式需要Linux系统( Linux 2.6+ )对epoll的支持,才能启用。需要补充的是HTTPS的连接( SSL )
SSL:安全套接字

1.2:event工作方式

在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程
当有真实请求过来的时候,将请求传递给服务器的线程执行完毕后,又允许它释放
这样,一个线程就能处理几个请求了,实现了异步非阻塞。这增强了在高并发场景下的请求处理
event允许释放,work不允许释放

1.3:event参数详解

  • 在httpd-mpm.conf配置文件中,以下是prefork模块的定义
< IfModule mpm event module>
StartServers  3
MinSpareThreads  75
MaxSpareThreads  250
ThreadsPerChild  25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
< /IfModule>
  • 参数说明
参数说明
StartServers服务启动识初始进程数,默认3
MinSpare Threads最小的空闲子进程数,默认75
MaxSpare Threaads最大的空闲子进程数,默认250
ThreadsPerChild每个子进程产生的线程数量,默认25
MaxRequestWorkers限定同一时间内客户端最大接入的请求数量,默认400
MaxConnectionsPerChild每个子进程在生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。将该值设置为非0值,可以防止运行PHP导致的内存泄漏

1.4:event优化建议

  • 可根据生产环境进行调试,以确定合适参数优化参考
< lfModule mpm event module>
ServerLimit  1000
StartServers  20
MinSpareThreads  25
MaxSpareThreads  1200
ThreadsPerChild  50
MaxRequestWorkers  2000
MaxConnectionsPerChild 1000
< /IfModule>

二、prefork模式与优化

2.1:prefork工作模式概述

  • prefork是一个多路处理模块(MPM) ,实现了一个进程型的、预派生的web
    服务器,适合于没有线程安全库、需要避免线程兼容性问题的系统
  • 在要求每个请求相互独立的情况下具有很好的特性,若一个请求出现问题
    不会影响到其他请求
  • 具有很强的自我调节能力,只需要很少的配置指令进行调整就可以适合于企业应用要求
  • 最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰同时又不能太大,以避免所需的内存超出物理内存的大小

2.2:prefork工作方式

  • 一个单独的控制进程(父进程)负责产生子进程,子进程用于监听请
    求并作出应答,因此在内存中会一直存在一些备用的 (spare)或是
    空闲的子进程用于响应新的请求,可加快响应速度
  • 父进程通常以root身份运行,以便绑定80端口,子进程通常以一个
    低特权的用户运行,可通过配置项的User和Group配置
  • 运行子进程的用户必须要对网站内容有读取权限,但是对其他资源
    必须拥有尽可能少的权限,以保证系统安全
  • 编译安装时没有指定工作模式,默认会使用prefork模式,可用
    httpd -I查看

2.3:prefork参数详解

  • 在httpd-mpm.conf配置文件中,以下是prefork模块的定义
< lfModule mpm event module>
ServerLimit  1000
StartServers  20
MinSpareThreads  25
MaxSpareThreads  1200
ThreadsPerChild  50
MaxRequestWorkers  2000
MaxConnectionsPerChild 1000
< /IfModule>
参数说明
ServerLimit最大进程数
StartServers启动的时候创建的进程数量
MinSpareServers最小空闲进程
MaxSpareServers最大空闲进程
MaxClients最多创建多少个子进程用来处理请求
MaxRequestsPerChild每个进程处理的最大请求数,达到请求数,进程即被销毁,如果设置为0,子进程永远不会结束

三、worker模式与优化

3.1:worker工作概述

  • worker也是多路处理模块(MPM) ,使网络服务器支持混合的多线
    程多进程
  • 由于使用线程来处理请求,所以可以处理海量请求,而系统资源的
    开销小于基于F进程的MPM
  • 但是也使用了多进程,每个进程又有多个线程,以获得基3 F进程的
    MPM的稳定性
  • 控制该MPM的最重要的指令是:控制每个子进程允许建立的线程
    数ThreadsPerChild指令和控制允许建立的总线程数的
    MaxClients指令

3.2:worker工作方式

  • 每个进程能够拥有的线程数量是固定的,服务器会根据负载情况增加或减少进程数量
  • 一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立ThreadsPerChild数量的服务线程和一个监听线程,监听线程监听接入请求并将其传递给服务线程处理和应答
  • Apache总是会维持一个备用(spare)或是 空闲的服务线程池,客户端无须等待新线程或新进程的建立即可得到服务
  • 父进程一-般都是以root身份启动,以绑定80端口;随后, Apache以较低权限的用户建立子进程和线程
  • User和Group指令用于配置Apache子进程的运行用户。子进程要对网页内容拥有读权限,但应该尽可能限制权限

3.3:worker参数详解

  • 在httpd-mpm.conf中worker的定义
< lfModule mpm event module>
ServerLimit  1000
StartServers  20
MinSpareThreads  25
MaxSpareThreads  1200
ThreadsPerChild  50
MaxRequestWorkers  2000
MaxConnectionsPerChild 1000
< /IfModule>

3.4:worker优化建议

  • 优化时要根据企业网站情况进行调试
< lfModule mpm event module>
ServerLimit  1000
StartServers  20
MinSpareThreads  25
MaxSpareThreads  1200
ThreadsPerChild  50
MaxRequestWorkers  2000
MaxConnectionsPerChild 1000
< /IfModule>

四、目录属性

4.1:Apache目录属性概述

  • 目录的权限设置使用<Directory目录路径>和
    < /Directory>这对语句为主目录或虚拟目录设置权限
  • 它们是一对容器语句,必须成对出现,它们之间封装的
    是具体的设置目录权限语句,这些语句仅对被设置目录
    及其子目录起作用

4.2:目录属性参数

参数作用
Options设置在特定目录使用哪些特性
AllowOverride允许存在于.htaccess文件中的指令类型
Require设置目录的访问控制
参数作用
Indexes当用户访问该目录时,但没有指定要访问那个文件,而且目录下不存在默认网页时,返回目录中的文件和子目录列表
MultiVierws内容协商的多重视图,Apache的一个智能特性。当访问目录中不存在的对象时
ExecCGI允许在该目录下执行CGI脚本
FollowSymLinks在该目录下允许文件系统使用的符号链接
Includes允许服务器端包含功能
IncludesNoExec允许服务器端包含功能,但禁止执行CGI脚本
All包含除了MultiViews之外所有特性,如果没有Option语句,默认All

五:Apache工作模式优化实验

5.1:工作模式优化内容

  • 查看工作模式
[root@localhost extra]# vim /etc/httpd.conf
Include conf/extra/httpd-mpm.conf	'//开启模块'
[root@localhost extra]# vim httpd-mpm.conf 
    prefork工作模式
<IfModule mpm_prefork_module>
    StartServers             5  启动时进程数
    MinSpareServers          5  最小空闲进程数
    MaxSpareServers         10  最大空闲进程数
    MaxRequestWorkers      250  线程数量最大值
    MaxConnectionsPerChild   0  最大连接数限制
</IfModule>
    worker工作模式
<IfModule mpm_worker_module>
    StartServers             3	启动时进程数
    MinSpareThreads         75  最小空闲进程数
    MaxSpareThreads        250  最大空闲进程数
    ThreadsPerChild         25  最大连接数限制
    MaxRequestWorkers      400  线程数量最大值
    MaxConnectionsPerChild   0  每个进程可以启动的线程数量上限值
</IfModule>
    
    event模式
 <IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

5.2:工作模式优化操作

  • 优化操作其实就是修改上方展示的参数

  • 例如

[root@localhost bin]# ./httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  prefork.c  '//编译安装在配置configure的时候指定的'
[root@localhost bin]# vim ../conf/extra/httpd-mpm.conf 
    '//在prefork工作模块中将启动时进程数修改为4'
    StartServers             4 
[root@localhost bin]# service httpd stop
[root@localhost bin]# service httpd start
[root@localhost bin]# lsof -i :80
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   129009   root    3u  IPv4 955264      0t0  TCP www.erbao.com:http (LISTEN)
httpd   129010 daemon    3u  IPv4 955264      0t0  TCP www.erbao.com:http (LISTEN)
httpd   129011 daemon    3u  IPv4 955264      0t0  TCP www.erbao.com:http (LISTEN)
httpd   129012 daemon    3u  IPv4 955264      0t0  TCP www.erbao.com:http (LISTEN)
httpd   129013 daemon    3u  IPv4 955264      0t0  TCP www.erbao.com:http (LISTEN)
修改成功
    '//其他数值都可以根据实际情况进行修改'

5.3:目录属性优化

<Directory "/usr/local/httpd/htdocs">
  Options Indexes FollowSymLinks	'//若找不到index文件,则在主页展示当前目录中所有文件	'
 '//indexes:支持index文件,FollowSymLinks:支持链接性文件'
  AllowOverride None

  Require all granted	'//允许所有权限'
  <RequireAll>
  Require all granted
  Require not ip 192.168.100.100
  </RequireAll>
</Directory>
  • 体验 Options Indexes FollowSymLinks
[root@localhost bin]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
aaa.jpg  index.html

查看主页

在这里插入图片描述

  • 修改index文件
[root@localhost htdocs]# mv index.html abc.html

查看主页
在这里插入图片描述
此时,这些文件列表是可以下载的

  • 创建链接性文件
[root@localhost htdocs]# ln -s /usr/share/man ./
[root@localhost htdocs]# ls
aaa.jpg  abc.html  man

查看主页
在这里插入图片描述
在这里插入图片描述

六:ab压力测试

6.1:ab压力测试工具概述

  • Apache自带压力测试工具ab,简单易用,且可以模拟对各种条件对web服务器发起测试请求
  • ab工具可以直接在Web服务器本地发起测试请求,这对于需要了解服务器的处理性能至关重要,因为它不包括数据的网络传输时间以及用户PC本地的计算时间,从而可以通过观测各种时间指标判断Web服务器的性能以便进行参数的优化调整

6.2:ab工具使用

  • 命令格式
ab [options] 网站网址
  • 参数说明
-n  测试会话中所执行的请求总数,默认时仅执行一个请求
-c  并发产生的请求个数,默认时一次一个
-t  测试所进行的最秒数
-v  设置显示信息的详细程度
  • 示例

    • /usr/local/httpd/bin/ab -n5000 - -c900 www. bt.com/index.html
    • 在测试时要根据情况调整求总数与并发用户数

6.3:ab测试结果关键参数说明

参数描述
Server Softwarehttp响应数据的头部信息
Server Hostname请求的url中的主机名称
Server Portweb服务器软件的监听端口
Document path请求url根的绝对路径
Document LengthHTTP响应数据的正文长度
Concurrency Level并发用户数
Time taken for tests所有这些请求被处理完所花费的时间总和
Complefe requests表示总和请求数
Failed requests失败的请求总和
参数描述
Total transferred请求的响应数据长度总和
Requests per second服务器的吞吐率,每秒处理的请求数
Time oer reqest用户平均请求等待时间
Time per request每个请求实际运行时间的平均值
Percentage of the requests served within a certain time (ms)描述每个请求时间的分布情况

6.4:Apache工作模式介绍

  • Apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件

  • 其工作模式有许多种,源码包安装httpd时可查看httpd-mpm.conf文件,该文件位于extra/conf目录中

  • 目前主要有两种模式

    • event模式
    • prefork模式
    • worker模式

例如

[root@apache1 bin]# ./httpd -|	'//查看Apache当前的工作模式'
Compiled in modules:
core.c
mod SO.C
http_ core.c
event.c

6.5:ab测试实验

6.5.1:实验环境胡目的

  • VMware软件

    centos7操作系统

    手工编译安装Apache

  • 实验目的

    使用Apache自带ab工具,测试压缩模块优化前后的时间差距

6.5.2:实验过程

  • 手工编译安装Apache,如有疑问,查看我前两篇博客,有详细教程

  • 找到ab工具位置,设置本地解析

[root@localhost httpd-2.4.29]# which ab
/usr/local/bin/ab
[root@localhost httpd-2.4.29]# cd /usr/local/bin/
[root@localhost bin]# ls
[root@localhost bin]# vim /etc/hosts
192.168.197.189 www.erbao.com	'//添加本地主机映射'
[root@localhost bin]# ping www.dabao.com
PING www.erbao.com (192.168.197.189) 56(84) bytes of data.
64 bytes from www.erbao.com (192.168.197.189): icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from www.erbao.com (192.168.197.189): icmp_seq=2 ttl=64 time=0.041 ms
  • 在网页主页中添加一张图片,开启服务,关闭防火墙
[root@localhost bin]# cd ../httpd/htdocs/
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# vim index.html 
<html><body><h1>It works!</h1>
<img src="aaa.jpg"/>
</body></html>
[root@localhost htdocs]# cp /mnt/aaa.jpg /usr/local/httpd/htdocs
[root@localhost htdocs]# service httpd start
[root@localhost htdocs]# systemctl stop firewalld.service 
[root@localhost htdocs]# setenforce 0
  • 开始进行优化前的ab压测
记录压测数据
前几次数据不准确,预计20秒左右为正常
[root@localhost htdocs]# ab -n 3000 -c 1000 www.erbao.com/index.html
1.  21.030
2.  21.012
3.  21.029
  • 优化压缩模块
[root@localhost htdocs]# vim /etc/httpd.conf 
LoadModule deflate_module modules/mod_deflate.so	'//开启模块'

<IfModule mod_deflate.c>	'//添加以下内容'
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascrip text/jpg text/png
  DeflateCompressionLevel 9
  SetOutputFilter DEFLATE
</IfModule>
[root@localhost htdocs]# service httpd stop 
[root@localhost htdocs]# service httpd start
  • 开启优化后测试
1.  21.070
2.  21.029
3.  20.280
网页内容很少,测试效果不明显。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值