设为首页 收藏本站
查看: 576|回复: 0

[经验分享] 优化Apache内存

[复制链接]

尚未签到

发表于 2016-12-29 11:21:32 | 显示全部楼层 |阅读模式
优化Apache内存  
Apache内存使用量可以使用下面命令:


ps -U apache u|awk '{S+=$6} END {print S}'
优化Apache(httpd)

KeepAlive 是否允许持续连接
MaxKeepAliveRequests 允许的持续连接的最大数
KeepAliveTimeout 持续连接在没有请求多少秒后切断
StartServers 最初启动时启动多少个服务器进程
MinSpareServers 空闲服务器进程的最小数
MaxSpareServers 空闲服务器进程的最大数
MaxRequestsPerChild 每个子进程处理的最大请求数

 
VPS优化Apache完全设置

一、削减模块以及计算调整可供APACHE使用的内存

影响WEB服务器最大的因素即为内存,所以我们把它放在最前面

在 默认状态下,Apache会分配最大256个并发客户端连接,或者256个进程(每一个都对应一个请求)。按照这种设置,一个流量巨大的网站会在顷刻间崩 溃(即使你假设每个进程占用5MB内存,那也需要1.3GB的内存来满足请求的数量)。如果不采取其它措施,系统会通过硬盘来尝试使用交换空间以处理它无 法在物理内存中完成的任务。

所以,我们需要修改httpd.conf,使它使用最小的模块集
修改httpd.conf文件,保留
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module modules/libphp5.so
LoadModule fastcgi_module modules/mod_fastcgi.so

去掉其它的模块

我们配置的VPS服务器,系统加LAMP程序启动后总共在300M左右的内存,你可能希望要求50%的物理内存都供Apache使用,这样,你需要确定可以让httpd真正使用的内存数。

首先准确计算出apache占用的进程数
# ps -ef|grep httpd
root 21678 1 0 Jul19 ? 00:00:00 /usr/local/apache//bin/httpd -k start
vuser 21679 21678 0 Jul19 ? 00:00:00 /usr/local/apache//bin/httpd -k start
vuser 21714 21678 0 Jul19 ? 00:00:07 /usr/local/apache//bin/httpd -k start
vuser 21855 21678 0 Jul19 ? 00:00:07 /usr/local/apache//bin/httpd -k start
看apache是以什么用户启动的,然后我们再用

# ps -U vuser -u vuser u
USER PID    %CPU %MEM VSZ        RSS     TTY STAT START TIME COMMAND
vuser 29838 0.0     0.0       200404  5580      ?      S 11:29 0:00 /usr/local/apache//bin/fcgi- -k start
vuser 29845 0.0    0.0        879952  7592      ?      Sl 11:29 0:00 /usr/local/apache//bin/httpd -k start
vuser 29851 0.0    0.0       879952  7592      ?       Sl 11:29 0:00 /usr/local/apache//bin/httpd -k start
(注:一般是用# ps -U apache -u apache u察看,但我这里运行apache的是vuser用户)

我 们看到单个httpd进程使用了7.6 MB的RSS(驻留集大小)内存以及最大为88M左右的VSZ(虚拟内存),这当然在很大程度上取决于你在Apache里加载和运行的模块数量。这决不是 一个固定的数字。由于这个数字里还包含了共享库包,所以不是100%的准确。我们可以认为RSS数字的一半是httpd线程真正使用的内存数,这可能还有 点保守,但是离我们的目的已经非常接近了,这样,我们HTTPD 线程 使用的内存数即为8M/2=4M

说明:MinSpareservers和MaxSpareServers分别设置空闲子进程的最小和最大数量,StartServers设置了服务器启动时建立的子进程数量。
ServerLimit 则是控制MaxClients所能使用的最大值。缩减MaxClients能让运行动态内容(比如:Drupal)的服务器有很大的改变。如果你的VPS 遭遇到流量的大幅增加,而你的MaxClients设置的太高的话,你的服务器将会无限循环工作于从物理内存交换页面到虚拟内存中,最终导致宕机。一般计 算适当的MaxClients值取决于你总共可用的系统内存除于每个Apache进程使用的内存。

计算MaxClient
MaxClients=(总内存-预留内存)/单个APACHE子进程使用的内存。
那么我们的1GRAM的VPS服务器的MaxClient即为:
MaxClients=(1024-512)/4=128个

设置MaxRequestsPerChild

MaxRequestsPerChild 设置的是每个子进程可以处理的请求数。每个子进程在处理了MaxRequestsPerChild个请求后将自动销毁。0意味着无限,即子进程永不销毁。 虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:

1、可防止意外的内存卸漏;
2、在服务器负载下降的时侯会自动减少子进程数。

因此,可根据服务器的负载来调整这个值,如果非零的话,vps上个人认为1000左右是比较合适的。事实上这个值对Apache的性能影响不是很大。

以下是本人在1G内存的VPS上常用的配置
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 20
ServerLimit 128
MaxClients 128

MaxRequestsPerChild 1000
</IfModule>


它们要根据你的VPS的大小和你的Apache进程大小等来决定。

备注:
HostnameLookups 最好设置为off,否则会带来延迟,因为对每一个请求都需要作一次DNS查询。如果你使用了任何”Allow from domain”或”Deny from domain”指令(也就是domain使用的是主机名而不是IP地址),则代价是要进行两次DNS查询(一次正向和一次反向,以确认没有作假)。所以, 为了得到最高的性能,应该避免使用这些指令(不用域名而用IP地址也是可以的)。如果网站空间中没有使用 Options FollowSymLinks,Apache就必须执行额外的系统调用以验证符号连接。为了避免这种情况应该在所有地方都设置 FollowSymLinks。如果设置AllowOverride all,则Apache会试图对文件名的每一个组成部分都打开.htaccess,如无必要应该对文件系统中所有的地方都使用 AllowOverride None。在Apache2.0能够忽略将要被发送的文件的内容的时候(比如发送静态内容),如果操作系统支持sendfile() ,则Apache将使用内核提供的sendfile()来发送文件。使用sendfile可以通过免除分离的读和写操作来提升性能。我们可以通过设置 EnableSendfile on来开启它。



二、优化KeepAlive

KeepAlive允许你 的访问者在同一个TCP连接上完成多个请求,理论上它有助于提升反应时间,因为你的访问者可以在同一个连接上请求你的网页,图片和 javascripts。遗憾地是,Apache对于每个请求都需要一个工作进程去处理。默认的每个工作进程将持续打开15秒来处理每个请求,即使你的访 问者已经不再使用它了!这也就意味着你的系统在任何时间都是缺少工作进程的。我们都希望我们那只有有限资源的小VPS能有确实在工作的工作进程。实现的方 法之一是关闭KeepAlive。在你的httpd.conf文件中找到下面的一行: 
KeepAlive On
然后将它改变为: 
KeepAlive Off
如果你的网站有大量的图片和javascripts,通常最好还是让KeepAlive保持打开,然后做些调整。
如果你决定让KeepAlive保持打开状态,改变默认的KeepAliveTimeout值就显得很重要了。它能避免连接没有在使用时仍然打开。在你的httpd.conf文件中找到下面一行: 
KeepAliveTimeout 15
你只希望连接打开5秒钟,这已经足够用户打开大部分必须的文件。所以改变此行为: 
KeepAliveTimeout 5
如果你希望让KeepAlive保持打开状态,同时应该增加MaxKeepAliveRequests。设置它为更大的值让每个连接可以处理更多的请求,从而增加效率。找到这行: 
MaxKeepAliveRequests 100
改变为: 
MaxKeepAliveRequests 200



三、调整Timeout

另一个较小的调整是改变TimeOut指令,这个调整可以得到小的性能提升和减小DDOS攻击的效果。这个指令用于设置Apache当接收新请求,处理请求和返回响应前需等

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-321063-1-1.html 上篇帖子: Apache Mina 学习 下篇帖子: 在Apache中使用SSL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表