Apache中如何实现ab压力测试、工作模式与目录属性优化

60次阅读
没有评论

共计 9005 个字符,预计需要花费 23 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 Apache 中如何实现 ab 压力测试、工作模式与目录属性优化,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

ab 压力测试工具

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

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

ab 工具使用

命令格式

ab [options]  网站网址

相关参数

-n  发送的请求量
-c  并发量
-t  测试所进行的最大秒数
-v  设置显示信息的详细程度

示例

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

ab 测试结果关键参数说明参数描述 Server Softwarehttp 响应数据的头信息 Server Hostname 请求的 url 中的主机名称 Server Portweb 服务器软件的监听端口 Document Path 请求的 url 根的绝对路径 Document Lengthhttp 响应数据的正文长度 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 目录中。

主要有两种模式名称特点 event 模式 /worker 模式一个进程中包含多个线程 prefork 模式一个进程中只包含一个线程 event 工作模式

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

event 参数

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

IfModule mpm_event_module 
 StartServers 3
 MinSpareThreads 75
 MaxSpareThreads 250
 ThreadsPerChild 25
 MaxRequestWorkers 400
 MaxConnectionsPerChild 0
 /IfModule

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

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

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 每个子进程建立的常驻的执行线程数。默认值是 25MaxRequestsPerChild 设置每个子进程在其生存期内允许伺服的最大请求数量。设置为 0 , 子进程将永远不会结束 Apache 目录属性

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

目录属性参数参数作用
Options 设置在特定目录使用哪些特性
AllowOverride 允许存在于 htaccess 文件中的指令类型
Require 设置目录的访问控制
Indexes 当用户访问该目录时,但没有指定要访问哪个文件,而且目录下不存在默认网页时,返回目录中的文件和子目录列表
MultiViews 内容协商的多重视图,Apache 的一 个智能特性。当访问目录中不存在的对象时
ExecCGI 允许在该目录下执行 CGI 脚本
FollowSymLinks 在该目录下允许文件系统使用符号连接
Includes 允许服务器端包含功能
IncludesNoExec 允许服务器端包含功能,但禁止执行 CG 脚本 All 包含除了 MultiViews 之外所有特性,如果没有 Options 语句,默认为 All
实例演示 Apache 工作模式之 prefork 工作模式一、共享资源包,并编译安装 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

二、编辑 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)

看完了这篇文章,相信你对“Apache 中如何实现 ab 压力测试、工作模式与目录属性优化”有了一定的了解,如果想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计9005字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)