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的现象,链接数过多。

1.[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配置。

1.CustomLog "|/usr/alibaba/cronolog/sbin/cronolog /home/ljh/output/logs/cookie_logs/%w/cookie_log" cookie_log
2.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: 

cronlog 10并发 20并发 50并发 100并发 
Blk_wrtn/s
3720

 

5077 6621 9394
cpu iowait 1% 1.2% 1.4% 2.2%
request tps 1310 1751 2563 3241

syslog(本地文件 同步输出):

syslog 10并发 20并发 50并发 100并发 
Blk_wrtn/s
1808

1790 1845 1760
cpu iowait 11.9% 12.2% 12.6% 12.4%
request tps 58 50 51 48

syslog(本地文件 异步输出): http://stackoverflow.com/questions/208098/can-syslog-performance-be-improved

syslog 10并发 20并发 50并发 100并发 
Blk_wrtn/s
1235

1624 4112 7712
cpu iowait 0.39% 0.87% 1% 0.86%
request tps 576 1163. 20882 3675

syslog(网络传输):

syslog 10并发 20并发 50并发 100并发 
request tps 1561 2107 3153 3320

测试环境

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进程。

时间: 2024-09-27 19:11:53

apache log引发io问题的相关文章

这是apache log,有各种异常访问,我尝试禁止都失败了,求助大神们这个应该怎么处理?

问题描述 这是apache log,有各种异常访问,我尝试禁止都失败了,求助大神们这个应该怎么处理? 解决方案 http://www.phpddt.com/server/apache-log.html

python apache log 获取百度关键词搜索来源

python apache log 获取百度关键词搜索来源 #!/usr/bin/python # -#- coding: utf-8 -*- import os, base64, re, fnmatch, imghdr, shutil, pprint, urlparse log = "seo教程.log" reader = open(log, 'r') config =  {'s0':{'h':'www.google.com.hk','q':'q'},'s1':{'h':'www.b

apache日志分析工具Apache Log Viewer使用教程

Apache Log Viewer是国外一款比较不错的日志分析软件,目前没有汉化版提供下载.分析界面如图: 你可以自定义查看分列信息,如Ip,地址,访问日期.访问页面.访问状态.来路地址.浏览标识(User Agent)如图:(打开步骤:Edit->Preferences->Columns) 自定义查看分列信息 日志分析工具查看到的是所有Apache访问活动,如果你想清晰看到如google机器人,百度蜘蛛等各种User-Agent访问统计可以使用Reports->User Agent.如

apache日志分析及系统cpu,内存,负载情况监控

1.根据Apache Log,获取当天秒并发数最多的记录 tail -10000 ./demo.fdipzone.com_access_log.2014-01-16_01 | cut -d"[" -f 2 | awk '{print $1;}' | sort | uniq -c | sort -nr | head tail -10000 ./demo.fdipzone.com_access_log.2014-01-16_01 | awk -F"[" '{print

java-类库-Apache Commons

   Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍.   组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库

PHP安装攻略:PHP+Apache在Win9X配置安装

apache|攻略 在PHP邮件列表中问得最多的问题可能就是:"如何在我的Windows机器上安装PHP?",那么也许我可以帮助回答这个问题.当你正确安装完成后,你会发现在Windows下开发PHP程序还是不错的. 本教程的目的是向你展示如何用"Apache和Windows"的组合来开发PHP程序. 教程中如未指明具体版本,则PHP为PHP3或PHP4 Beta 2或3,Apache为 1.3.x. 一.安装Apache 首先,你须要一个WEB服务器,我推荐Apac

Apache, PHP在Windows 9x/NT下的安装与配置 (二)

五.在Windows NT下运行Apache 如果你运行的Windows NT系统,你可能要将Apache作为系统的服务进程来运行.点击"开始"按钮,选择"程序","Apache Web Server","Insfall Apache as Service".这样,你可以通过NT的控制面版中的"服务"程序来管理Apache的启动和终止.除非有特殊的理由,我建议你将"Apache Service&q

PHP+Apache在Win9X配置安装

  PHP邮件列表中问得最多的问题可能就是:"如何在我的Windows机器上安装PHP?",那么也许我可以帮助回答这个问题.当你正确安装完成后,你会发现在Windows下开发PHP程序还是不错的.    本教程的目的是向你展示如何用"Apache和Windows"的组合来开发PHP程序.       教程中如未指明具体版本,则PHP为PHP3或PHP4 Beta 2或3,Apache为 1.3.x.       一.安装Apache       首先,你须要一个WE

Apache HttpClient 没有设置time out导致应用长时间阻塞的问题

update 2014-5-18: 今天又处理了一个HttpClient阻塞的问题,还是socket read没有超时设置. 用jstack -l pid 得到线程的调用栈,每隔一段时间执行一次,对比三次的thread dump结果,发现有一个线程是三次执行的位置一样的,说明它是阻塞在这里了: "org.springframework.jms.listener.DefaultMessageListenerContainer#7-1" prio=10 tid=0x00007f345127