免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3048 | 回复: 3
打印 上一主题 下一主题

[Web] apache的bug? ----piped log产生乱码。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-10 19:45 |只看该作者 |倒序浏览
本帖最后由 liangzhishao 于 2010-03-11 10:09 编辑

   首先看看版本号
$ httpd -v
Server version: Apache/2.2.3
Server built:   Jun 12 2007 11:17:57

   下面是httpd.conf的主要配置
  1. ServerLimit 200
  2. ThreadLimit 200
  3. StartServers 100
  4. MaxClients 16000
  5. MinSpareThreads 50
  6. MaxSpareThreads 200
  7. ThreadsPerChild 200
  8. MaxRequestsPerChild 100000
  9. KeepAlive Off


  10. ServerSignature Off
  11. ServerTokens Prod
  12. TraceEnable off
  13. EnableSendfile On
  14. LimitRequestFields 50
  15. #LimitRequestFieldSize 4094
  16. #LimitRequestLine 4094
  17. LogLevel warn
  18. <IfModule log_config_module>
  19.     LogFormat "%h %I %O %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{cookie}i\"" combined

  20.     # liangzhi test 20100302
  21.     #CustomLog "/data/liangzhi/access_log" combined
  22.     #CustomLog "|/home/liangzhi/rotatelog" combined
  23.     #CustomLog "|/usr/local/sbin/cronolog /data/liangzhi/logfile_%Y%m%d%H%M" combined
  24.     #CustomLog "|/data/apache-2.2.3/bin/rotatelogs -l /data/liangzhi/logfile_%Y%m%d%H%M 1200" combined

  25. </IfModule>
复制代码
   
    问题描述
发现在我的服务器上用piped log收集到的access log中有乱码,形如
192.168.168.226 - - [10/Ma192.168.168.226 - - [10/Mar/2010:19:16:23 +0800] "GET /worklog/ HTTP/1.1" 302 1902
r/2010:19:16:23 +0800] "GET /worklog HTTP/1.1" 301 239

而这两条日志应该是
192.168.168.226 - - [10/Mar/2010:19:16:23 +0800] "GET /worklog HTTP/1.1" 301 239
192.168.168.226 - - [10/Mar/2010:19:16:23 +0800] "GET /worklog/ HTTP/1.1" 302 1902

显然是第二行插入到了第一行中间

我还做了大量的测试,总结如下:
1. 用直接写文件和管道两种方式对比,发现数据没有丢,但是管道的数据有乱的,而直接写文件没有乱的
2. 乱码出现的几率是十万分之三左右
3. 乱码都是其中一行被后续的一行或几行切开
4. 混杂在一起的日志都是同一秒内的日志
5. apache 自带的rotatelog 、官方推荐的cronolog以及我自己用c写的各种filter程序都不能避免这个问题



   希望遇到同样问题的坛友能一起讨论讨论,最好解决此问题,解决不了也一起学习一下,哈哈

论坛徽章:
0
2 [报告]
发表于 2010-03-10 21:38 |只看该作者
观察

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
3 [报告]
发表于 2010-03-13 10:05 |只看该作者
关注

你修改过log的配置代码么?

论坛徽章:
0
4 [报告]
发表于 2010-03-15 20:22 |只看该作者
我没有修改过log模块的相关代码

其实整个apache的代码都没有修改而直接编译的
编译时选项如下
  1. --enable-shared=max
  2. --enable-module=rewrite
  3. --enable-module=so
  4. --enable-cache
  5. --enable-disk-cache
  6. --enable-mem-cache
  7. --enable-expires
  8. --enable-headers
  9. --enable-usertrack
  10. --with-mpm=worker
  11. --enable-modules=usertrack expires headers deflate file-cache mem-cache status
  12. --enable-logio
复制代码


反而为了此问题我倒是去看了看apache源代码
httpd-2.2.3/modules/loggers/mod_log_config.c
httpd-2.2.3/srclib/apr/file_io/unix/open.c

大概看了看, 还没有花力气深究
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP