- 论坛徽章:
- 0
|
本帖最后由 liangzhishao 于 2010-03-11 10:09 编辑
首先看看版本号
$ httpd -v
Server version: Apache/2.2.3
Server built: Jun 12 2007 11:17:57
下面是httpd.conf的主要配置
- ServerLimit 200
- ThreadLimit 200
- StartServers 100
- MaxClients 16000
- MinSpareThreads 50
- MaxSpareThreads 200
- ThreadsPerChild 200
- MaxRequestsPerChild 100000
- KeepAlive Off
- ServerSignature Off
- ServerTokens Prod
- TraceEnable off
- EnableSendfile On
- LimitRequestFields 50
- #LimitRequestFieldSize 4094
- #LimitRequestLine 4094
- LogLevel warn
- <IfModule log_config_module>
- LogFormat "%h %I %O %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{cookie}i\"" combined
- # liangzhi test 20100302
- #CustomLog "/data/liangzhi/access_log" combined
- #CustomLog "|/home/liangzhi/rotatelog" combined
- #CustomLog "|/usr/local/sbin/cronolog /data/liangzhi/logfile_%Y%m%d%H%M" combined
- #CustomLog "|/data/apache-2.2.3/bin/rotatelogs -l /data/liangzhi/logfile_%Y%m%d%H%M 1200" combined
- </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程序都不能避免这个问题
希望遇到同样问题的坛友能一起讨论讨论,最好解决此问题,解决不了也一起学习一下,哈哈
|
|