我看到我的 gc.log 文件是数据文件,而其他日志文件是 ASCII 文本。
因此,我无法通过非 gc.log 文件进行 grep。
$ pwd
/app/tomcat7/logs
$ du -hsmc *log* | sort -n
50 access_log2016-11-21.log
74 access_log2016-11-25.log
79 access_log2016-11-24.log
300 gc.log-20161118
418 gc.log-20161119
542 gc.log-20161120
$ file access_log2016-11-24.log gc.log-20161118
access_log2016-11-24.log: ASCII text
gc.log-20161118: data
$ time grep a access_log2016-11-24.log | wc -l
426520
real 0m0.888s
user 0m0.740s
sys 0m0.150s
$ time grep a gc.log-20161118
Binary file gc.log-20161118 matches
real 0m9.574s
user 0m9.278s
sys 0m0.274s
您可以在 gc.log 文件中看到 grep 花费的时间更长,并且没有返回有用的结果。
将 GC 打印到 gc.log 文件的参数是 -Xloggc:/app/tomcat7/logs/gc.log
如何确保 gc.log 文件创建为 ASCII 文本文件而不是数据文件?
最佳答案
这里的问题是 grep 将 GC 日志解释为二进制数据文件,它实际上是文本。如果您在 grep 上使用 -a 或 --text 参数,它会将其视为文本。
grep -a gc.log-20161118
关于java - 如何创建非数据 gc.log 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40812369/