Apache网页深刻优化之ab压力测试、工做模式与目录属性优化

ab压力测试工具

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

在进行性能调整优化过程当中,可用ab压力测是工具进行优化效果的测试:
1.优化前先使用ab进行压力测试
2.优化后,重启服务,再使用ab进行压力测试
3.对比两次测试的结果,看优化效果是否明显
4.为了能更客观的评价web服务的性能,通常优化先后都要进行屡次测试,取测试结果的平均值进行对比html

ab工具使用

命令格式mysql

ab [options]    网站网址

相关参数nginx

-n  发送的请求量

-c  并发量

-t      测试所进行的最大秒数

-v      设置显示信息的详细程度

示例c++

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

ab测试结果关键参数说明

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

Apache工做模式概述

Apache做为现今web服务器用的最普遍也是最稳定的开源服务器软件。其工做模式有许多种,源码包安装httpd时可查看httpd-mpm.conf文件,该文件位于extra/conf目录中。web

主要有两种模式

名称 特色
event模式/worker模式 一个进程中包含多个线程
prefork模式 一个进程中只包含一个线程

event工做模式

(1)event是Apache最新的工做模式,它和worker模式很像,不一样的是在于它解决了keep-alive长链接的时候占用线程资源被浪费的问题。event工做模式在遇到某些不兼容的模块时,会失效,将会回退到worker模式。event工做模式须要Linux系统(Linux 2.6+)对epoll的支持,才能启用。须要补充的是HTTPS的链接(SSL)
(2)在event工做模式中,会有一些专门的线程用来管理这些keep-alive类型的线程。当有真实请求过来的时候,将请求传递给服务器的线程执行完毕后,又容许它释放。这样, 一个线程就能处理几个请求了 ,实现了 异步非阻塞。这加强了在高并发场景下的请求处理。sql

event参数

在httpd-mpm.conf配置文件中,如下是event模块的定义apache

<IfModule mpm_event_module>
  StartServers      3
  MinSpareThreads       75
  MaxSpareThreads       250
  ThreadsPerChild       25
  MaxRequestWorkers     400
  MaxConnectionsPerChild  0
</IfModule>
参数 说明
StartServers 服务启动时初始的进程数,默认3
MinSpareThreads 最小的空闲子进程数,默认75
MaxSpareThreads 最大的空闲子进程数,默认250
ThreadsPerChild 每一个子进程产生的线程数量,默认是25
MaxRequestWorkers 限定同一时间内客户端最大接入的请求数量,默认是400
MaxConnectionsPerChild 每一个子进程在其生命周期内容许最大的请求数量, 若是请求总数已经达到这个数值,子进程将会结束,若是设置为0,子进程将永远不会结束。将该值设置为非0值,能够防止运行PHP致使的内存泄露

优化建议:可根据生产环境进行调试,以肯定合适参数
优化参考:
vim

<IfModule mpm event module>
  ServerLimit       1000
  StartServers       20
  MinSpareThreads       25
  MaxSpareThreads       1200
  ThreadsPerChild       50
  MaxRequestWorkers     2000
  MaxC onnectionsPerChild 1000
</IfModule>

prefork工做模式

(1)prefork是一个多路处理模块(MPM),实现了一个进程型的、预派生的web服务器,适合于没有线程安全库、须要避免线程兼容性问题的系统。在要求每一个请求相互独立的状况下具备很好的特性,若一个请求出现问题不会影响到其余请求。具备很强的自我调节能力,只须要不多的配置指令进行调整就能够适合于企业应用要求。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以免所需的内存超出物理内存的大小
(2)一个单独的控制进程(父进程)负责产生子进程,子进程用于监听请求并做出应答,所以在内存中会- -直存在一-些备用的(spare)或是空闲的子进程用于响应新的请求,可加快响应速度。父进程一般以root身份运行,以便绑定80端口,子进程一般以一个低特权的用户运行,可经过配置项的User和Group配置。运行子进程的用户必需要对网站内容有读取权限,可是对其余资源必须拥有尽量少的权限,以保证系统安全。编译安装时没有指定工做模式,默认会使用prefork模式,可用httpd-l查看安全

prefork参数

在httpd-mpm.conf配置文件中,如下是prefork模块的定义

<IfModule mpm_ prefork module>
  StartServers      20
  MinSpareServers       10
  MaxSpareServers       50
  MaxClients        150
  MaxRequestsPerChild   0
</IfModule>
参数 说明
ServerLimit 最大进程数
StartServers 启动的时候建立的进程数量
MinSpareServers 最少空闲进程
MaxSpareServers 最多空闲进程
MaxClients 最多建立多少个子进程用来处理请求
MaxRequestsPerChild 每一个进程处理的最大请求数,达到请求数,进程即被销毁,若是设置为0,子进程永远不会结束

优化建议:可根据生产环境进行调试,以肯定合适参数
优化参考:

<IfModule mpm prefork module>
  ServerLimit           1000
  StartServers          10
  MinSpareServers           10
  MaxSpareServers           30
  MaxClients            1000
  MaxRequestsPerChild   5000
</IfModule>

worker工做方式

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

worker参数

参数 说明
ServerLimit 最大进程数,默认值是"16"
ThreadLimit 每一个子进程的最大线程数,默认值是“64”
StartServers 服务器启动时创建的子进程数,默认值是"3"
MaxClients 容许同时接受的最大接入请求数量(最大线程数量)
MinSpare Threads 最小空闲线程数,默认值是"75"
MaxSpareThreads 设置最大空闲线程数。默认值是"250"
ThreadsPerChild 每一个子进程创建的常驻的执行线程数。默认值是25
MaxRequestsPerChild 设置每一个子进程在其生存期内容许伺服的最大请求数量。设置为"0",子进程将永远不会结束

Apache目录属性

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

目录属性参数

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


实例演示

Apache工做模式之prefork工做模式

1、共享资源包,并编译安装Apache服务

[root@localhost ~]# smbclient -L //192.168.10.37
Enter SAMBA\root's password: 

    Sharename       Type      Comment
    ---------       ----      -------
    LNMP            Disk      

[root@localhost ~]# mount.cifs //192.168.10.37/LNMP /abc
Password for root@//192.168.10.37/LAMP:  
[root@localhost ~]# cd /abc
[root@localhost abc]# ls 
apr-1.6.2.tar.gz                  game.jpg
apr-util-1.6.0.tar.gz             httpd-2.4.29.tar.bz2
awstats-7.6.tar.gz                install_lamp.sh
cronolog-1.6.2-14.el7.x86_64.rpm  mysql-5.6.26.tar.gz
Discuz_X2.5_SC_UTF8.zip           nginx-1.12.0.tar.gz
error.png                         php-5.6.11.tar.bz2

[root@localhost abc]# tar jxvf httpd-2.4.29.tar.bz2 -C /opt
[root@localhost abc]# tar zxvf apr-1.6.2.tar.gz -C /opt
[root@localhost abc]# tar zxvf apr-util-1.6.0.tar.gz -C /opt
[root@localhost abc]# ls /opt
apr-1.6.2  apr-util-1.6.0  httpd-2.4.29  rh
[root@localhost opt]# mv apr-1.6.2/ httpd-2.4.29/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util
[root@localhost opt]# cd httpd-2.4.29/
[root@localhost httpd-2.4.29]# yum install -y gcc gcc-c++ pcre-devel zlib-devel expat-devel
[root@localhost httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \
> --enable-deflate \
> --with-mpm=prefork \
> --enable-expires \
> --enable-so \
> --enable-rewrite \
> --enable-charset-lite \
> --enable-cgi

[root@localhost httpd-2.4.29]# make && make install

[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf

2、编辑Apache服务的相关配置文件

1.修改httpd.conf主配置文件

[root@localhost httpd-2.4.29]# vim /etc/httpd.conf
458 Include conf/extra/httpd-mpm.conf
//检索到第458 行的的mpm模块,删除注释符#以启用功能

 51 Listen 192.168.235.137:80       //检索到地51行的IPv4监听,取消注释并修改地址为本地Linux服务器的地址
 52 #Listen 80
//注释第52行的IPv6监听

193 ServerName www.accp.com:80
//检索到第193行,取消注释并自行编辑域名,此处仅供参考

2.查看httpd-mpm.conf配置文件,确认prefork工做模式默认参数

[root@localhost httpd-2.4.29]# cd /usr/local/httpd/conf/extra/      //进入扩展目录
[root@localhost extra]# ls      //可见httpd-mpm.conf配置文件
httpd-autoindex.conf  httpd-mpm.conf
httpd-dav.conf        httpd-multilang-errordoc.conf
httpd-default.conf    httpd-ssl.conf
httpd-info.conf       httpd-userdir.conf
httpd-languages.conf  httpd-vhosts.conf
httpd-manual.conf     proxy-html.conf

[root@localhost extra]# vim httpd-mpm.conf 
 28 <IfModule mpm_prefork_module>
 29     StartServers             5      //启动时进程数为5个
 30     MinSpareServers          5      //最小空闲进程数为5个
 31     MaxSpareServers         10      //最大空闲进程数为10个
 32     MaxRequestWorkers      250      //最大并发进程数为250个
 33     MaxConnectionsPerChild   0      //最大链接数限制为0
 34 </IfModule>
//查看prefork工做模式参数信息

[root@localhost bin]# cd /usr/local/httpd/bin
//切换到Apache服务的/bin目录
[root@localhost bin]# ls
ab            checkgid     htcacheclean  httxt2dbm
apachectl     dbmmanage    htdbm         logresolve
apr-1-config  envvars      htdigest      rotatelogs
apu-1-config  envvars-std  htpasswd
apxs          fcgistarter  httpd
[root@localhost bin]# ./apachectl start
//使用Apache服务的自带脚本开启服务

[root@localhost bin]# netstat -ntap |grep 80        //查看服务的80端口是否启用
tcp        0      0 192.168.235.137:80      0.0.0.0:*               LISTEN      35722/httpd      

[root@localhost bin]# lsof -i :80       //查看系统的80端口进程信息,其中user为root的是主进程,余下的5个都是子进程
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   35722   root    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35723 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35724 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35725 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35726 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   35727 daemon    3u  IPv4  43621      0t0  TCP 192.168.235.137:http (LISTEN)

3.编辑httpd-mpm.conf配置文件,修改prefork工做模式参数

[root@localhost bin]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf 

 28 <IfModule mpm_prefork_module>
 29     StartServers                         10         //启动时进程数改成10个
 30     MinSpareServers             10          //最小空闲进程数改成10个
 31     MaxSpareServers             50          //最大空闲进程数改成50个
 32     MaxRequestWorkers      150          //最大并发进程数为150
 33     MaxConnectionsPerChild   0          
 34 </IfModule>

4.从新开启服务

[root@localhost bin]# ./apachectl stop
[root@localhost bin]# ./apachectl start

5.查看prefork工做模式的进程信息

//使用./httpd -l命令可查看工做模式,当前为prefork工做模式
[root@localhost bin]# ./httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  prefork.c

 //查看进程信息,相较以前的默认模式多了5个子进程 
[root@localhost bin]# lsof -i :80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   36071   root    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36072 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36073 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36074 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36075 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36076 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36077 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36078 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36079 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36080 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)
httpd   36081 daemon    3u  IPv4  51494      0t0  TCP 192.168.235.137:http (LISTEN)

---谢谢阅读---

相关文章
相关标签/搜索