技术解析

Apache 服务器性能优化
0
2021-04-27 16:50:50
idczone

对于很多人来说,宝塔默认的Apache服务器配置导致内存C P U经常爆满,httpd大批量进程导致网站直接瘫痪,又不懂得如何去优化,就算没有黑客攻击网站也经常打不开,迫使更换其他Nginx服务器…

正好最近我也遇到这类问题,之前在官网上也看到别人发的转换教程,但是,有俩个问题:

1.众所周知Apache比Nginx好,特别是针对大型网站,Apache会更加稳定

2.一套流程下来太麻烦,可能会遇到未知的bug,对于小白来说更加头痛

所以,遇到问题不是逃避,我翻阅了大量百度教程,根据我自己的服务器(2h4g)配置,优化了相关配置,目前解决了该问题,如果你也遇到相同的问题,可以根据教程进行自行设置

我的配置截图:

95554309_1607240291

和我相同机型的服务器可以直接设置相同数,其他机型根据以下说明调整


StartServers:服务器启动时建立的子进程数量

MinSpareServers:空闲子进程的最小值

MaxSpareServers: 空闲子进程的最大值 

ServerLimit:手动添加ServerLimit,修改apache最大并发连接数的参数设置,一定要将它放在MaxRequestWorkers的前面,并且它的值也一定要大于MaxRequestWorkers的值

MaxRequestWorkers: 最大数量的服务器进程允许 

MaxConnectionsPerChild:一个独立的子进程将能处理的请求数量,原先的值是0,代表无限,这应该就是吃内存的原因,我将其改为100


ServerLimit则是控制MaxClients所能使用的最大值。缩减MaxClients能让运行动态内容(比如:WordPress)的服务器有很大的改变。如果你的VPS遭遇到流量的大幅增加,而你的MaxClients设置的太高的话,你的服务器将会无限循环工作于从物理内存交换页面到虚拟内存中,最终导致宕机。一般计算适当的MaxClients值取决于你总共可用的系统内存除于每个Apache进程使用的内存。例如,如果你还有500MB的内存可用于Apache,每个Apache进程大约使用20MB的内存,你可以设置你的MaxClients为(512-12)/ 10 = 50(这个计算好像原文中有误)。使用命令top可以得到你VPS实时内存的使用。


MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程佔用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。如果 MaxRequestsPerChild预设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果佔用了200~300M内存,即使负载下来时佔用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成50、100、200,以防内存溢出。


Timeout是一个连接多少时间后断开,这个参数设置在30-60是一般的php程序都是适用的,至少要运行一些要占用大量时间的php程序,那么适当调高也是可以的,但请不要太高,否则会影响apache性能,本次优化我们使用30就很足够了。


MaxKeepAliveRequests 是一个连接最大的请求量,对于页面有较多的图片等元素,可以适当调高一点,对于一般的网页设置在80-120是足够的,我们就设置为120,如果设置太高会导致httpd长时间不能退出释放内存的。


keepAlive启用场景
如果有较多的js,css,图片访问,则需要开启长链接
如果内存较少,大量的动态页面请求,文件访问,则关闭长链接,节省内存,提高apache访问的稳定性
如果内存充足,cpu较好,服务器性能优越,则是否开启长链接对访问性能都不会产生影响


KeepAliveTimeout 是当用户处理一次连接时,如果在该参数的时间内还有请求则会继续执行,不需要重新创建新的连接,直到达到MaxKeepAliveRequests的最大值才会退出。对于perfork模式下的,有人认为是将KeepAlive Off会比较好,但是对于绝大多数的网站都会不多不少有些图片元素,所以将该项打开,并将KeepTimeOut设置在2-5秒,不但有效提高服务器性能,也能加快页面打开速度。


数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服