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 软件版本
软件名 | 对应版本 |
---|---|
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和其余飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其余所有商标或注册商标,由各自的所有人领有。
留神
本文档的内容视为飞腾的窃密信息,您该当严格遵守窃密工作;未经飞腾当时书面批准,您不得向任何第三方披露本文档内容或提供给任何第三方应用。
因为产品版本升级或其余起因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为应用领导,飞腾在现有技术的根底上尽最大致力提供相应的介绍及操作指引,但飞腾在此明确申明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保障。
本文档中所有内容,包含但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法领有其知识产权,包含但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面批准,任何人不得擅自应用、批改,复制上述内容。