apache内存优化
前阵子总是发现 httpd 进程的使用内存总量居然达到了上百Mb,有时甚至上Gb,真是夸
张。Apache 是架在 Squid 的后面,照理说不应该出现这种情况。通过排查,发现是
Apache 中开启了持续长连接导致。
Apache 进程的内存使用是 "递增/渐进" 式的,也就是在当前进程的 httpd 过程中,内
存使用是持续增加的,也就是说在该进程退出之前,内存是持续增加的。主要是由于下
面三个参数来控制。
KeepAlive On 设定是否要开启持续长连接,由于前面有 Squid,因此在这里把它打开
MaxKeepAliveRequests 50 在一次持续长连接中,最多允许接收几次请求,如果设置太
大的话,很可能导致 httpd
进程持续消耗很多内存,因此可以选择一个适当的值,因为重新创建一个新的进程也是
要有一定开销的
KeepAliveTimeout 5 设定一个长连接在没有活动后等待多久自动关闭,可以设置小一点
,不过跟上面的类似,如果太小的话,也会导致频繁创建新的进程
现在,调整完上面的参数后,会发现 httpd 进程不再象以前那样狂吃内存了。
如果不需要流量日志,那么把 httpd.conf 中的 TransferLog 指向到 /dev/null/除非
你确定使用 .htaccess 来控制一些目录的权限,否则设置 \"AllowOverride
None\" ,这样就免去 Apache 在每个目录搜索 .htaccess 文件的劳役之苦。
不要让不需要的后台进程运行。
千万不要把页面或者日志文件写到网络磁盘上,例如 NFS。
不要让 Apache (httpd) 运行于 inetd 模式。
不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。
避免使用 SSI tag。在 CGI 脚本中:
文件 I/O:打开的文件数目越少越好。
Shell 命令:采用全路径来调用 shell 命令。
如果你的网站主要以 CGI 来驱动,那么请使用 mod_perl。
本文简要介绍了几个优化 Apache 的技巧,在实战中十分有用。
升级 Apache 到最新版本,新版本往往包含性能提升和安全更新。
在 httpd.conf 中设置 "HostNameLookups off" 能避免针对每个访问者的 DNS 域名的
反向查询。
对于繁忙的网站,在 httpd.conf 中设置 "MaxClients 230" 或者更高。这项设置让更
多的 httpd 进程同时响应请求,并避免了处理器排队的情况发生。
采用另外一台服务器处理图片文件。
缺保您的 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的文章可以参考本站:采
用 mod_gzip 加速 Zope 和 Apache
保持您的 Apache 苗条,编译那些仅仅需要的模块,在编译之前,修改
src/Configuration 文件,在那些不需要的模块之前用 # 号注释掉。
- 最新评论