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)反对FastCGI13)通过第三方模块能够反对JavaServlets(援用自https://baike.baidu.com/item/Apache/6265?fr=aladdin)

2 环境要求

2.1 硬件配置

用处型号
网络服务器飞腾腾云S2500处理器服务器
客户端飞腾腾云S2500处理器服务器

2.2 软件版本

软件名对应版本
httpd2.4.49
LuaJIT2.1
apr1.7.0
apr-util1.6.1
pcre8.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模式下测出,且都基于上述配置进行批改。

序号吞吐量调优措施
162722初始配置
257165最大过程数:16-\>8,最大线程数:400-\>200
330372最大过程数:16-\>4,最大线程数:400-\>100
461362最大过程数:16-\>24,最大线程数:400-\>600
564477最大过程数:16-\>40,每过程可创立线程数:25-\>10
658884最大过程数:16-\>10,每过程可创立线程数:25-\>40
763783最大过程数:16-\>80,每过程可创立线程数:25-\>5
898785绑核0-63

二次测试以确认调优成果(测试前充沛预热可让数值整体晋升,预热操作为用ab压测十次)。

序号吞吐量调优措施
166403初始配置
266818最大过程数:16-\>24,最大线程数:400-\>600
369565最大过程数:16-\>40,每过程可创立线程数:25-\>10
465990最大过程数:16-\>10,每过程可创立线程数:25-\>40
568302最大过程数:16-\>80,每过程可创立线程数:25-\>5
6103228绑核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和其余飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其余所有商标或注册商标,由各自的所有人领有。

留神
本文档的内容视为飞腾的窃密信息,您该当严格遵守窃密工作;未经飞腾当时书面批准,您不得向任何第三方披露本文档内容或提供给任何第三方应用。

因为产品版本升级或其余起因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为应用领导,飞腾在现有技术的根底上尽最大致力提供相应的介绍及操作指引,但飞腾在此明确申明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保障。

本文档中所有内容,包含但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法领有其知识产权,包含但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面批准,任何人不得擅自应用、批改,复制上述内容。