Apache和Resin产生大容量日志的解决办法
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!
昨天服务器上网站无故无法访问,重启Apache之后过一段时间又无法访问。后来无意间看到Apache的日志文件(access.log)竟然有7G多,赶紧删除之再重启Apache就OK了。但是总是这样也不是办法,如果时间一长忘记清空日志文件的话又会造成Apache死掉,另外之前Resin也产生过这样的问题。后来综合Google后的信息采用了如下的解决方法:
1. Apache日志
减少日志大小有两种方法,一种是修改日志记录级别,可以将默认的warn级别提升为error级别;
- LogLevel error
另外一种方法就是将日志文件按照每天创建一个文件的方式产生,这样就不会将所有的信息写入到一个文件。在Linux下可以将 httpd.conf 中 CustomLog logs/access.log common 修改为:
- CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/%Y_%m_%d.access.log 86400 480" common
Windows下没有rotatelogs这个工具,但是可以下载一个cronolog的软件,进入官方下载页面下载Win 32 version (ZIP file) 版本,将压缩包中的cronolog.exe解压缩到apache安装目录的bin目录下面,然后可以将CustomLog logs/access.log common 修改为:
- CustomLog "|bin/cronolog.exe logs/access%Y%m%d.log" combined
这样可以达到同样的效果。需要说明的是再重启Apache之后原来的cronolog.exe进程不会自动关闭,这个应该是软件的bug。官方最新的更新日期是2002-01-24,而且最新的1.6.2 版本没有windows版本,所以要耐心等待了。
2. Resin日志
前段时间提到过因为Resin日志巨大的问题而导致出错,过了这几天又发现jvm.log文件达到1G的容量了,照这样下去如果忘记清空日志的话又会导致程序出错。无意间在一篇文章中看到这样一句话:
Resin启动时通过bin目录下的wrapper.pl文件进行控制,我们可以修改这个文件来加一些参数……
后来经过测试这样的启动方式是在Linux系统下,Windows下面修改这个文件是没有作用的。记得以前我在 Resin 3.x 经验总结文章中提到在Windows下设置jvm内存的时候可以使用下面的命令:
- httpd.exe -Xmn100M -Xms500M -Xmx500M
是不是上面提到的wrapper.pl文件中的httpd参数都可以这样设置呢?后来在Resin官方的新闻组里面找到了这个配置参数:
You can use -jvm-log logfile as an option to httpd.exe
这样的话就可以设置Resin不产生jvm.log日志文件,因为里面的信息在web程序中通过log4j获得了。
- httpd -jvm-log NUL
按照以下步骤重新按照Resin的NT服务:
- #1 停止Resin NT服务和Apache
- httpd -remove
- #2 安装Resin NT服务
- httpd -jvm-log NUL -install
- #3 重新启动Resin和Apache
参考资料:
解决Apache日志文件ACCESS.LOG日益膨胀的一个办法
jvm.log workarounds
resin的优化
[...] 最后还有一个事情需要说明一下,如果在windows系统下将resin注册成服务程序之后就会在log目录下产生jvm-defautl.log文件,而且这个文件会一直累加,所以会变的文件非常大而影响resin的性能。原来在Apache和Resin产生大容量日志的解决办法这篇文件中提到的使用httpd -jvm-log NUL的方法在3.1中无法使用,而且查找了大量的文档也没有找到合适的方法,后来索性将log目录中的写入权限去掉了,重启resin也没有任何影响,算是解决了这个问题。 [...]
Pingback by » Resin中对日志输出的配置 [Java堂] — 2010年11月14日 @ 2:18 下午