最近我寫了一些微型基準測試代碼,所以我必須打印出JVM行爲以及基準信息。我用如何重定向JVM輸出而不撕裂應用程序的輸出?
-XX:+PrintCompilation
-XX:+PrintGCDetails
和其他選項來獲得JVM狀態。對於基準信息,我只需使用System.out.print()
方法。因爲我需要知道我打印的消息和JVM輸出的順序。
雖然JVM輸出有時會撕掉我的消息,但是由於它們位於不同的線程中,所以我可以在控制檯中將它們打印出來,但可以理解並且可以接受。
當我需要做一些批次的基準,我想redirect the output into a file
與pipe (> in Linux system)
,並使用Python從文件中獲取結果,並進行分析。
這裏的問題是:
The JVM output always overlapped with the messages I printed in the Java application.
它毀了消息的完成。
任何想法如何處理這種情況?我需要both the JVM output and application output in the same place in order to preserve the sequence because it is important. And they do not overlap on each other so I don't lose anything.
好主意,我試着在代理中重定向stdout和stderr,我可以重定向從我的java代碼的輸出,但JVM輸出不重定向。在你提到的文章中介紹的方法 - 在加載類時修改字節碼,我必須知道JVM在輸出信息時調用了什麼,然後我可以修改它,但是我沒有那種信息,你有什麼建議嗎? – dawnstar