我想将GC日志与我自己的基于http的Logger集成在一起,以避免基于文件的日志记录。 我关注了http://www.fasterj.com/articles/gcnotifs.shtml条文章。从JDk 7开始,我们可以在GC事件上添加我们自己的侦听器,它工作正常。但是我希望我的gc日志的打印方式与之前的记录相同。
像下面一样。
2019-11-04T10:12:33.754+0000: 3.199: [GC pause (G1 Evacuation Pause) (young) Desired survivor size 50331648 bytes,new threshold 15 (max 15),0.0300627 secs] [Parallel Time: 18.2 ms,GC Workers: 8] [GC Worker Start (ms): Min: 3198.9,Avg: 3198.9,Max: 3199.0,Diff: 0.1] [Ext Root Scanning (ms): Min: 0.7,Avg: 2.7,Max: 11.7,Diff: 11.0,Sum: 21.3] [Update RS (ms): Min: 0.0,Avg: 0.0,Max: 0.0,Diff: 0.0,Sum: 0.0] [Processed Buffers: Min: 0,Max: 0,Diff: 0,Sum: 0] [Scan RS (ms): Min: 0.0,Sum: 0.0] [Code Root Scanning (ms): Min: 0.0,Avg: 0.6,Max: 2.6,Diff: 2.6,Sum: 4.5] [Object Copy (ms): Min: 0.8,Avg: 9.9,Max: 16.1,Diff: 15.3,Sum: 79.4] [Termination (ms): Min: 0.0,Avg: 4.8,Max: 5.6,Diff: 5.6,Sum: 38.6] [Termination Attempts: Min: 1,Avg: 1.0,Max: 1,Sum: 8] [GC Worker Other (ms): Min: 0.0,Sum: 0.1] [GC Worker Total (ms): Min: 17.9,Avg: 18.0,Max: 18.1,Diff: 0.1,Sum: 143.9] [GC Worker End (ms): Min: 3216.9,Avg: 3216.9,Max: 3217.0,Diff: 0.1] [Code Root Fixup: 0.9 ms] [Code Root Purge: 0.1 ms] [Clear CT: 0.2 ms] [Other: 10.8 ms]
所以我来自能够打印的通知:
end of minor GC: - 1342 ParNew (from Allocation Failure) 26 milliseconds; start-end times 67212728-67212754 end of minor GC: - 1343 ParNew (from Allocation Failure) 28 milliseconds; start-end times 68412633-68412661 end of major GC: - 54 ConcurrentMarkSweep (from System.gc()) 147 milliseconds; start-end times 68563369-68563516 end of minor GC: - 1344 ParNew (from Allocation Failure) 109 milliseconds; start-end times 70212722-70212831 end of minor GC: - 1345 ParNew (from Allocation Failure) 39 milliseconds; start-end times 71413175-71413214 end of minor GC: - 1346 ParNew (from Allocation Failure) 42 milliseconds; start-end times 72013977-72014019
public void handleNotification(Notification notification,Object handback) { //get the information associated with this notification //get all the info and pretty print it GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from((CompositeData) notification.getUserData()); LOG.info(info.getGcaction() + ": - " + info.getGcInfo().getId()+ " " + info.getGcName() + " (from " + info.getGcCause()+") "+info.getGcInfo().getDuration() + " milliseconds; start-end times " + info.getGcInfo().getStartTime()+ "-" + info.getGcInfo().getEndTime()); }