apache log引发io问题

 

目前公司中使用到了apache+jetty/jboss的架构模式,apache承担了日志记录的一个职责。

 

同事在做性能测试时,发现一个奇怪的现象:15个并发直接压apache,load居然达到了100多,tps只有200多。直接压后端的jboss tps可以有1000多。

 

1. 刚开始以为是apache keepalive的搞怪,但后来确认apache配置文件的keepalive模式已经是Off。看了下tcp状态,近1000个close_wait状态(说明是客户端主动关闭,服务端是被动关闭),ESTABLISHED也就20多个.

 

2. 下一步确认apache和后端的jboss链接是否存在异常,通过观察mod_jk的日志文件,ajp协议的tcp链接状态,一切正常,而且链接数也就是80来个,说明到后端的压力并不高。

 

3. 进一步确认apache线程数,发现apache_error.log已经出现Max Client的现象,链接数过多。

 

[Sat Mar 12 17:44:31 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting

 

4. 查了下系统的性能参数(nnd,机器上居然没装sysstat包,sar,iostat命令都用不了),使用vmstat -n 1看了下。 发现cpu 的iowait参数居然达到了60%,基本猜想估计是apache日志记录出了问题

 

5. 检查apache conf文件,使用的log配置。

 

CustomLog "|/usr/alibaba/cronolog/sbin/cronolog /home/ljh/output/logs/cookie_logs/%w/cookie_log" cookie_log 
CustomLog "|/usr/bin/logger -p local1.info" cookie_log 

 

使用了两个CustomLog.

 

  • cronolog 项目使用比较普遍,目前是按周进行cookie访问日志处理,是一个io处理的点。
  • logger系统自带的syslog的接口api。syslog可以支持本地打印和网络打印等。具体的内容可以man logger /  man syslog
6. 后来确认是syslog引起的问题。
测试环境的redhat版本和线上的测试环境不一致,local1.info在syslog配置中是记录到了/var/log/message本地文件,说白了syslog多走了一次IO。

通过sar命令简单的分析了 cronolog和syslog的 io tps 性能数据.
cronlog: 
cronlog10并发20并发50并发100并发 
Blk_wrtn/s

3720

 

507766219394
cpu iowait1%1.2%1.4%2.2%
request tps1310175125633241

syslog(本地文件 同步输出):
syslog10并发20并发50并发100并发 
Blk_wrtn/s

1808

179018451760
cpu iowait11.9%12.2%12.6%12.4%
request tps58505148

syslog10并发20并发50并发100并发 
Blk_wrtn/s

1235

162441127712
cpu iowait0.39%0.87%1%0.86%
request tps5761163.208823675

syslog(网络传输):
syslog10并发20并发50并发100并发 
request tps1561210731533320


测试环境
1. Linux 内核 2.6.18-131.el5.customxen 64位机器,是个虚拟机, 5G内存。
2. apache 2.2.15
3. cronolog  1.6.2
4. syslog  1.4.1

总结:
  1. syslog基于本地磁盘的日志记录,在性能上存在比较严重的性能瓶颈,在测试时需要留意。
  2. syslog基于异步文件记录,性能上接近于网络传输的性能
  3. syslog基于网络数据日志记录的,单从request tps上看要略优于cronolog,但具体数据的发送的准确性就没有验证了


补充说明

apache关于日志的使用说明文档:http://httpd.apache.org/docs/2.2/logs.html

针对这cronolog 和 syslog日志记录的使用优化,可以参考http://httpd.apache.org/docs/2.2/logs.html#piped

 

针对syslog使用,网上是建议是使用syslog-ng,据说性能更好。目前公司的线上服务器也使用的是syslog-ng替换默认的syslogd进程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值