垃圾回收器日志 (loggc) 文件轮换与 logrotate 无法正常工作
在将JVM垃圾回收日志选项与Linux logrotate命令一起使用时,我遇到了一个奇怪的问题。当执行旋转时,它填充作为 JVM 参数的文件的第一行的 NUL ( ^@ ) 值。
假设这是java调用(Test.class位于/home/test/中):
java -Xloggc:/home/test/test.log -cp /home/test/ Test
此文件的 logrotate 配置如下:
/home/test/test.log {
rotate 56
missingok
notifempty
copytruncate
nocreate
nomail
}
我还有一个 crontab 条目记录每分钟用于测试目的:
*/1 * * * * /usr/sbin/logrotate -f /etc/logrotate.d/gcLog
我得出的结论是,JVM在追加模式下写入,并保留某种用于写入相关文件中下一行的偏移量,即使该文件被logrotate截断(我可能是错的)。
我的下一个想法是尝试将标准输出重定向到测试.log文件。我使用了这个java调用,并为logrotate和cron保持相同的配置:
java -verbose:gc -cp /home/test/ test > /home/test/test.log
同样,当 test.log 被 logrotate 截断时,新创建的文件将在第一行填充 NUL (^@) 值。
不用说,我没有发现任何有用的东西使用谷歌。我发现另一个关于stackoverflow的问题有点相关,但我无法设法设置Java脚本包装器,所以这不起作用。
有没有人遇到过这个问题?任何想法为什么会发生这种情况?更好的是,任何解决方法或解决方案?我需要尝试将对应用程序的调用通过管道传输到一些读取输出的脚本,也许可以查看Tomcat在catalina.out中记录和旋转stdout的方式(在这里,一些帮助也将不胜感激)