Apache 性能优化几则
有点标题党了,称不上是性能优化,只能算是在日常工作遇到的某些问题及解决方案;目的旨在提升网站运行效率。
本文涉及Apache 日志处理、查看服务器运行状态、服务器信息、及访问控制(只是皮毛)。
如果你也遇到此类问题,我想本文会给你些参考,你可以从这些方面着手处理。
近日公司的网站首页打开超慢,在15秒左右,晕死,不知道怎么回事……没办法的事,只能硬着头皮来处理这事。(注:公司是网站、数据库分离的。)
排查原因
于是便从:
1、网站程序
2、数据库
3、Apache 负载
这三处一一排查,写了一个PHP运行时间检测的程序(太垃圾就不放出来了),发现读取数据库处太慢了,是他占用了绝大部分时间。于是向数据库人员反馈,并提供慢查询的SQL及存储过程。
数据库人员处理后,网站称不上是秒开,也在3秒左右……
日志处理
查看Apache运行日志的时候,发现日志有1个G了,上帝,应该对日志进行拆分处理避免文件过大。
参照方法在 Apache日志分割的3种方法,使用,rotatelogs 每天一个日志文件按周循环写入。
rotatelogs 写入日志时,如果虚拟机数量太多则生成N多个rotatelogs进程,我这里因为使用的是Oracle数据,造成连接时,报错提示:ORA-24408: 无法生成唯一的服务器组名,无法,暂时不使用rotatelogs记录日志;另外尝试重新启动Apache时,提示80端口被占用,无法,只能将进程中的,rotatelogs 结束掉才能启动。
另外,如果对每个虚拟机都应用 rotatelogs 写入日志的话,容易造成生成4倍于虚拟机数量的进程(像cmd、conhost、rotatelogs)。暂时不清楚原因。
性能优化
建议做的是,开启Gzip压缩、MPM处理,此类需要细细考量下。
参考文档及相关文档:
- 一次Apache性能优化
- Apache性能优化
- 性能优化 Apache 服务器
- LAMP 系统性能调优,第 1 部分: 理解 LAMP 架构
- LAMP 系统性能调优,第 2 部分: 优化 Apache 和 PHP
- LAMP 系统性能调优,第 3 部分: MySQL 服务器调优
运行状态
通过开启 mod_status 模块 来查看Apache 运行状况。
参考文档:
配置信息
同 mod_status 一样,开启 info 模块,即可查看Apache配置信息。
参考Apache 手册:
Apache 手册 mod_info 模块 地址1、地址2。
但是,有利与有弊,容易造成狂飙CPU和狂吃内存(或许吧),所以,建议,在性能优化完毕后,关闭它。
访问控制
说说 Order Allow,Deny,以前看到它时老犯迷糊。这里介绍下本人通俗的理解:
像,
<Directory "d:/wamp/www/"> Order Allow,Deny # 定义访问顺序 先允许,后禁止 Allow from all # 允许 来自 所有 (即允许所有访问) </Directory>
即,
<Directory "d:/wamp/www/"> 定义访问顺序 规则1,规则2 规则1 from all </Directory>
切记,规则间紧跟,(英文逗号)号,不能有空格!
如果只定义的访问顺序则没定义访问规则,像,Order Allow,Deny,则会以最后一个规则为准,即 Deny ,即禁止所有访问。相反亦是如此。
其他情况把,按顺序,执行定义的规则1和规则2就行,看结果就知道当前访问是否被允许。
像,
Order Deny,Allow # 定义访问顺序 先禁止 再允许
Deny from ip1 ip2 # 哦,禁止 ip1 和 ip2 访问,没 Allow(允许) 规则?那就只禁止ip1 ip2访问
或者
Order Allow,Deny # 定义访问顺序 先允许 再禁止
Allow from all # 允许所有人访问
Deny from ip1 ip2 # 不好意思,你是ip1 ip2的话,禁止访问
是等同的。
参看,Apache 手册 mod_authz_host 模块 地址1、地址2。
参考文档:
你终于发表了一篇我能看的懂的文章
不会吧老大?你可别吓我啊