`
agapple
  • 浏览: 1582993 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

分享到:
评论
2 楼 agapple 2011-03-17  
ZavaKid 写道
syslog和syslong-ng是如何进行测试的呀?


没在机器上测试过syslog-ng的性能,其实测试下来也就syslog的同步输出性能比较差。
这样一分析对比,cronolog也应该是采用异步输出进行处理,不然性能不会这么好
1 楼 ZavaKid 2011-03-15  
syslog和syslong-ng是如何进行测试的呀?

相关推荐

    Apache HTTP Server Version 2.2 文档(2013.4.10最新)

    mod_logio mod_log_config mod_log_forensic mod_mem_cache mod_mime mod_mime_magic mod_negotiation mod_nw_ssl mod_proxy mod_proxy_ajp mod_proxy_balancer mod_proxy_connect mod_proxy_ftp mod_proxy_http mod...

    hadoop0.23.9离线api

    org.apache.hadoop.io.serializer.avro org.apache.hadoop.jmx org.apache.hadoop.lib.lang org.apache.hadoop.lib.server org.apache.hadoop.lib.service org.apache.hadoop.lib.service.hadoop org.apache....

    前端-后端java的Util类的工具类

    │ │ │ frame-sourcefiles-org.apache.ibatis.io.html │ │ │ frame-sourcefiles-org.apache.ibatis.jdbc.html │ │ │ frame-sourcefiles-org.apache.ibatis.logging.commons.html │ │ │ frame-sourcefiles...

    logging-log4j-1.3alpha-8.zip

    log4j是Apache的一个开放源代码项目,使用它可以将日志信息输出到文件、OutputStream、java.io.Writer、远程log4j服务器和远程Unix Syslog守护进程,甚至是NT的事件记录器。

    com.springsource

    ... com.springsource.org.apache.commons.httpclient-3.1.0.jar, com.springsource.org.apache.commons.io-1.4.0.jar,com.springsource.org.apache.commons.logging-1.1.1.jar, ...

    com.springsource相关jar

    包含: ...com.springsource.org.apache.commons.io-1.4.0.jar, com.springsource.org.apache.commons.lang-2.1.0.jar, com.springsource.org.apache.commons.logging-1.1.1.jar, ...

    J2EE的apache相关jar包

    比较新的J2EE常用的apache相关jar包,包含src源码 commons-fileupload-1.3.1.jar commons-io-2.4.jar commons-lang3-3.3.2.jar commons-logging-1.1.3.jar log4j-1.2.17.jar

    tomcat_apache共享动态连接库

    LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule cern_meta_module modules/mod_cern_meta.so ...

    tomcat6、7、8、9, maven3.5

    有关详细信息,请参阅Apache Tomcat 5.5 Changelog。 的Apache Tomcat 5.0.x版在很多方面在Apache Tomcat 4.1的改进,其中包括: 性能优化和减少的垃圾收集 重构的应用程序部署器,具有可选的独立部署器,允许在...

    log-captor::bullseye:捕获日志条目以进行单元测试

    LogCaptor ...Apache Log4j Log4j与Lombok Log4j2与Lombok 带Lombok的SLFJ4 用Lombok记录Java Util 有关所有方案的信息,请参见单元测试LogCaptor 。或查看此项目Java教程,其中包含各个日志框架的更

    poi jar包大全

    commons-codec-1.5.jar commons-logging-1.1.jar dom4j-1.6.1.jar junit-4.11.jar log4j-1.2.13.jar poi-3.10-FINAL-20140208.jar poi-examples-3.10-FINAL-...org.apache.commons.io_1.3.2.jar commons-io-2.2.jar

    外网无法访问HDFS org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block

    报错 org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block 2、百度结果 参考 https://blog.csdn.net/xiaozhaoshigedasb/article/details/88999595  防火墙记得关掉; 查看DataNode是否启动;...

    nrnb.github.io:国家网络生物学资源网站代码

    日志:/var/log/apache2/nrnb_access.log和nrnb_error.log 服务器管理员: 域名:NetworkSolutions.com(apico) 注意:由于目录的大小, presentation目录的内容会从存储库中排除,每个目录的大小都超过100MB。...

    java开发常用jar包

    commons-io-2.2.jar commons-lang-2.5.jar commons-lang3-3.2.jar commons-logging-1.1.3.jar dom4j-1.6.1.jar druid-1.0.15.jar fastjson-1.1.37.jar freemarker-2.3.22.jar hibernate-commons-...

    parallel-consumer:带有客户端队列的并行Apache Kafka客户端包装程序,具有密钥并发和可扩展的非阻塞IO处理的更简单的Consumerproducer API

    带有客户端队列的并行Apache Kafka客户端包装程序,具有密钥并发和可扩展的非阻塞IO处理的更简单的使用者/生产者API。 :warning: 这不是Confluent支持的产品。 这是一个实验性的Alpha阶段加速器。 有关更多信息,...

    读取Properties文件的java类

    import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class ReadProperties { private static final Log log = LogFactory.getLog(ReadProperties.class); /** * ...

    JAVA SSH整合需要用到的jar包汇总

    com.springsource.org.apache.log4j-1.2.15.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar commons-fileupload-1.3.1.jar commons-io-2.2.jar commons-lang3-3.2.jar dom4j-1.6.1.jar freemarker-...

    misakai-kafka:Misakai.Kafka 是 C# 的高性能 Apache Kafka 客户端

    用于 Apache Kafka 的高性能 C# 客户端。 该客户端旨在不支持所有可能的功能,而是为长期运行的生产者/消费者提供简约轻量级的 Kafka 客户端。 该代码基于 James Roland 的 KafkaNet 实现,经过大幅精简和优化。 ...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    同时使用了Struts2、Spring4、Hibernate4、log4j、slf4j、junit4、ehcache等库或框架,搭建一个最基本的项目原型。 三、 三大框架最新版本下载:截止2014-10-01 Struts2.3.6:发布于2014-05-03,目前的最新版本。...

    file-rotatelogs:[存档] perl5 文件的端口

    apachelog "github.com/lestrrat-go/apache-logformat" rotatelogs "github.com/lestrrat-go/file-rotatelogs" ) func main () { mux := http . NewServeMux () mux . HandleFunc ( "/" , func ( w ...

Global site tag (gtag.js) - Google Analytics