是否可以在 Sun JVM 中滚动垃圾收集器日志?
目前我使用以下方法生成日志:
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -verbose:gc -Xloggc:gc.log
但我必须使用 fifo 队列和 rotatelogs 手动轮换它们,以便每天创建一个新日志。我希望有更好的解决方案。
也许有一种方法可以从 java 内部访问此日志条目,以便我可以将它们重定向到 log4j?
编辑:使用 fifo 队列的解决方案不够好,因为如果从该队列读取的进程(例如 rotatelogs)读取速度变慢,它将减慢整个 jvm(显然 Sun/Oracle 同步执行 gc 日志记录)
最佳答案
HotSpot JVM 添加了对 GC 日志轮换的内置支持。 它在 RFE 6941923 中有描述。并且可用于:
- Java 6 Update 34
- Java 7 Update 2 (但在这些发行说明中没有提及)
可以使用三个新的 JVM 标志来启用和配置它:
-
-XX:+UseGCLogFileRotation
必须与-Xloggc:<filename>
一起使用; -
-XX:NumberOfGCLogFiles=<number of files>
必须>=1,默认为1; -
-XX:GCLogFileSize=<number>M (or K)
默认设置为 512K。
关于java - java中的滚动垃圾收集器日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3822097/