共计 4962 个字符,预计需要花费 13 分钟才能阅读完成。
1 软件介绍
Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页服务器,能够在大多数计算机操作系统中运行,因为其多平台和安全性被宽泛应用,是最风行的 Web 服务器端软件之一。它疾速、牢靠并且可通过简略的 API 扩大,将 Perl/
Python 等解释器编译到服务器中。
Apache 源于 NCSA httpd 服务器,通过屡次批改,成为世界上最风行的 Web 服务器软件之一。Apache Web 服务器领有以下个性:
1)反对最新的 HTTP/1.1 通信协议
2)领有简略而强有力的基于文件的配置过程
3)反对通用网关接口
4)反对基于 IP 和基于域名的虚拟主机
5)反对多种形式的 HTTP 认证
6)集成 Perl 解决模块
7)集成代理服务器模块
8)反对实时监督服务器状态和定制服务器日志
9)反对服务器端蕴含指令(SSI)
10)反对平安 Socket 层(SSL)
11)提供用户会话过程的跟踪
12)反对 FastCGI
13)通过第三方模块能够反对 JavaServlets(援用自 https://baike.baidu.com/item/Apache/6265?fr=aladdin)
2 环境要求
2.1 硬件配置
用处 | 型号 |
---|---|
网络服务器 | 飞腾腾云 S2500 处理器服务器 |
客户端 | 飞腾腾云 S2500 处理器服务器 |
2.2 软件版本
软件名 | 对应版本 |
---|---|
httpd | 2.4.49 |
LuaJIT | 2.1 |
apr | 1.7.0 |
apr-util | 1.6.1 |
pcre | 8.45 |
3 利用部署
上面将具体介绍 Web 利用 Apache 的搭建步骤,并对其性能进行验证,次要包含如下步骤:
第一步,获取源码;
第二步,编译装置 apr;
第三步,编译装置 apr-util;
第四步,编译装置 pcre;
第五步,编译装置 httpd;
第六步,配置 httpd 端口;
第七步,运行验证。在运行验证时,通过网络服务器启动 Apache 服务,在客户端应用 ab 工具进行性能测试,个别地,模仿 200 用户独特发动 20 万次网络申请,之后,获取 TPS(Requests per second)值。须要留神的是,网络服务器和客户端都须要部署 Apache 环境。
4 利用调优
4.1 调优目标
通过调整 Apache 配置文件来无效地进步 Web 利用性能。
4.2 调优办法
4.2.1 物理绑核
应用 taskset 对 apache 过程进行绑核,避免过程跨路;操作如下:
taskset -c 0-63 /usr/local/httpd-2.4.49/bin/apachectl start
4.2.2 优化 httpd.conf
批改配置文件 httpd.conf 内容,次要包含:
1、启动压缩;
2、启用重写;
3、提供文件描述符缓存反对;
4、启用基于 URL 键的内容动静缓冲(内存或磁盘);
5、启用基于磁盘的缓冲管理器;
6、基于内存的缓冲管理器;
7、屏蔽所有不必要的模块;
8、启动动态文件缓存;
9、容许 apache 批改或革除传递到 cgi 或 ssi 页面的环境变量;
10、禁止依据客户端申请头字段设置环境变量;
11、禁止生成形容服务器状态的页面;
12、启用过滤(应用缓存必须启用过滤模块)。
4.2.3 配置 mpm 模式
Apache 提供了多解决模块(MPM),用来绑定到网络端口上,承受申请以及调度子过程解决申请。
模块名 | 阐明 |
---|---|
Prefork | 在启动时会预派生多个子过程,每个子过程只有一个线程。不须要放心线程平安问题,然而每个过程都占用系统资源,在解决高并发申请的场景中,会耗费大量的系统资源。 |
Worker | 每个子过程能生成更多的线程,每个线程都能解决申请。缩小了子过程数以及内存使用量,晋升了服务器的并发能力,但安全性低,不能与不是线程平安的模块一起应用。 |
Event | 基于 Worker 模块,但它解决了 keep-alive 场景下,长期被占用的线程的资源节约问题。Event 模块会有一个专门的线程治理 keep-alive 类型的线程,当有实在申请过去的时候,将申请传递给服务线程,执行结束后,又容许它开释。这样一个线程就能解决几个申请,实现异步非阻塞。 |
MPM 模块的加载形式是在 httpd.conf 中增加下列内容(三者任选其一):
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
如果须要调整 MPM 模块过程细节,则须要在 httpd.conf 中启用 MPM 模块配置文件:
Include conf/extra/httpd-mpm.conf
具体的 MPM 模块配置文件是 httpd-mpm.conf,文件中蕴含以下内容:
Prefork MPM 模块
默认配置:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
其中 StartServers 代表初始化预派生的子过程数,MinSpareServers 代表最小闲暇子过程数,MaxSpareServers 代表最大闲暇子过程数,MaxRequestWorker 代表最大申请数(因为在 Prefork MPM 模块中一个申请数对应一个子过程,故也能够了解为最大派生子过程数),MaxConnectionsPerChild 代表每个过程可解决的申请数(达到目标值后该过程将被杀死,0 代表没有限度)。
Worker MPM 模块
加载形式为在 httpd.conf 中增加下列内容:
LoadModule mpm_worker_module modules/mod_mpm_worker.so
默认配置:
<IfModule mpm_worker_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
其中 StartServer 代表初始化预派生的子过程数,另外能够应用 ServerLimit 来指定最大过程数(默认为 16)。MinSpareThr eads 代表最小闲暇线程数,MaxSpareThreads 代表最大闲暇线程数,ThreadsPerChild 代表每个子过程可创立的线程数,MaxRequestWorkers 代表最大申请数(因为在 Worker MPM 模块中,一个申请数对应一个线程,故也能够了解为最大线程数。实践上,最大线程数不能超过最大过程数与每个过程可创立的线程数的乘积),MaxConnectionsPerChild 代表每个过程可解决的申请数(达到目标值后该过程将被杀死,0 代表没有限度)。
Event MPM 模块
加载形式为在 httpd.conf 中增加下列内容:
LoadModule mpm_event_module modules/mod_mpm_event.so
默认配置:
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
参数作用与 Worker MPM 模块统一。
4.3 调优示例
示例环境为一台飞腾腾云 S2500 处理器服务器与一台英特尔 X86 服务器,Apache 同时部署在两台服务器上,飞腾腾云 S2500 处理器服务器作为 Apache 服务器,X86 服务器作为客户端模仿 200 用户发动 20 万次网络申请,模仿 100 次后取 TPS 算平均值。因为 Event 是显著优于 Worker 的,所以优先选择 Event 模式,其初始配置如下:
初始过程数:3 最大过程数:16 最小闲暇线程数:75 最大闲暇线程数:400 每过程可创立线程数:25 最大线程数:400 |
下表中的调优记录均为 Event 模式下测出,且都基于上述配置进行批改。
序号 | 吞吐量 | 调优措施 |
---|---|---|
1 | 62722 | 初始配置 |
2 | 57165 | 最大过程数:16-\>8,最大线程数:400-\>200 |
3 | 30372 | 最大过程数:16-\>4,最大线程数:400-\>100 |
4 | 61362 | 最大过程数:16-\>24,最大线程数:400-\>600 |
5 | 64477 | 最大过程数:16-\>40,每过程可创立线程数:25-\>10 |
6 | 58884 | 最大过程数:16-\>10,每过程可创立线程数:25-\>40 |
7 | 63783 | 最大过程数:16-\>80,每过程可创立线程数:25-\>5 |
8 | 98785 | 绑核 0 -63 |
二次测试以确认调优成果(测试前充沛预热可让数值整体晋升,预热操作为用 ab 压测十次)。
序号 | 吞吐量 | 调优措施 |
---|---|---|
1 | 66403 | 初始配置 |
2 | 66818 | 最大过程数:16-\>24,最大线程数:400-\>600 |
3 | 69565 | 最大过程数:16-\>40,每过程可创立线程数:25-\>10 |
4 | 65990 | 最大过程数:16-\>10,每过程可创立线程数:25-\>40 |
5 | 68302 | 最大过程数:16-\>80,每过程可创立线程数:25-\>5 |
6 | 103228 | 绑核 0 -63 |
由上表可知,通过绑核以及调整过程数与线程数的搭配能够晋升 Apache 的性能。在飞腾腾云 S2500 处理器服务器上,通过设置最大过程数为 40,每过程可创立线程数为 10 且将 apache 过程绑核 0 -63 可达到最佳性能。
5 常见问题
1)apr-util 编译报错
如果报错内容如下图所示:
则通过装置 expat-devel 包能够解决。
2)批改 Apache 配置后不失效
局部 Apache 配置批改后须要敞开 Apache 服务再启动,间接重启服务不失效。
# /usr/local/httpd-2.4.49/bin/apachectl stop && sleep 4 && /usr/local/httpd-2.4.49/bin/apachectl start
6 附录
6.1 示例脚本
预热:
# for i in {1..10};do ab -c 200 -n 200000 -k http://10.31.72.37:80/index.html;sleep 2;done
压测:
# rm -f ave.log;for l in {1..20};do rm -f tmp.log;for i in {1..5};do ab -c 200 -n 200000 -k http://10.31.72.37:80/index.html\|grep "Requests per second" \>\> tmp.log;sleep 1;done ;cat tmp.log\|awk -F""'BEGIN{sum=0} {sum=sum+\$4} END{print sum/5}'\>\> ave.log;done;cat ave.log \|awk'BEGIN{sum=0} {sum=sum+\$1} END{print sum/20}'
更多资料获取:飞腾开发者平台
版权所有。飞腾信息技术有限公司 2023。保留所有权力。
未经本公司批准,任何单位、公司或集体不得擅自复制,翻译,摘抄本文档内容的局部或全副,不得以任何形式或路径进行流传和宣传。
商标申明
Phytium 和其余飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其余所有商标或注册商标,由各自的所有人领有。
留神
本文档的内容视为飞腾的窃密信息,您该当严格遵守窃密工作;未经飞腾当时书面批准,您不得向任何第三方披露本文档内容或提供给任何第三方应用。
因为产品版本升级或其余起因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为应用领导,飞腾在现有技术的根底上尽最大致力提供相应的介绍及操作指引,但飞腾在此明确申明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保障。
本文档中所有内容,包含但不限于图片、架构设计、页面布局、文字描述,均由飞腾和 / 或其关联公司依法领有其知识产权,包含但不限于商标权、专利权、著作权等。非经飞腾和 / 或其关联公司书面批准,任何人不得擅自应用、批改,复制上述内容。