在
-XX:+LogCompilation -XX:LogFile=/path/to/file.log
下运行时在热点上记录编译时,日志会写入 /path/to/file.log
,这很好,但不同的(更多)日志也会写入 两个 /tmp/hs_c<someid>_pid<mypid>.log
文件,这是我没想到的。终止应用程序时,其中一个文件将被删除,但另一个文件仍保留在那里。
发生了什么事,如何将日志记录保留到给定的日志文件,但停止记录到 /tmp 文件?
当
-XX:+LogCompilation
打开时,HotSpot 会记录全局编译事件(例如,当提交新的编译任务时或创建新的编译方法时)以及每个编译器线程的详细编译活动。
为了避免混合编译器线程的并发输出,每个线程将自己的日志写入专用的临时文件,该临时文件会在该线程终止或 JVM 退出后合并到
LogFile
中。 /tmp/hs_cNNN.log
文件是这些每线程日志。如果 JVM 异常终止,文件可能会保持未删除状态。
如果您不喜欢
LogCompilation
的详细输出,请尝试使用 -XX:+PrintCompilation
。或者,启用 Flight Recorder 来获取以 JFR 格式记录的 JIT 相关事件。