簡體   English   中英

使用logrotate的垃圾收集器日志(loggc)文件輪換無法正常工作

[英]Garbage collector log (loggc) file rotation with logrotate does not work properly

使用帶有Linux logrotate命令的JVM垃圾收集日志選項時,我遇到了一個奇怪的問題。 執行旋轉時,它將NUL(^ @)值填充為作為JVM參數給出的文件的第一行。

假設這是java調用(Test.class位於/ home / test /):

java -Xloggc:/home/test/test.log -cp / home / test / Test

該文件的logrotate配置如下:

/home/test/test.log {
旋轉56
missingok
notifempty
copytruncate
nocreate的
nomail
}

為了測試目的,我每分鍾都有一個crontab條目記錄:

* / 1 * * * * / usr / sbin / logrotate -f /etc/logrotate.d/gcLog

我得出的結論是JVM寫入追加模式並保留某種偏移用於在相關文件中寫下一行,即使文件被logrotate截斷(我可能錯了)。


我的下一個想法是嘗試將stdout重定向到test.log文件。 我使用了這個java調用並為logrotate和cron保留了相同的配置:

java -verbose:gc -cp / home / test / Test> /home/test/test.log

再次,當log.ate截斷test.log時,新創建的文件在第一行填充NUL(^ @)值。


沒必要說我沒有找到任何有用的谷歌。 我發現了另一個關於stackoverflow類型的問題,但我無法設置Java Script Wrapper,所以這不起作用。

有人遇到過這個問題嗎? 知道為什么會這樣嗎? 更好,任何變通方法或解決方案? 我需要嘗試將對應用程序的調用傳遞給讀取輸出的某個腳本,並且可能看看Tomcat在catalina.out中記錄和旋轉stdout的方式(這里也會非常感謝一些幫助)

我們在運行Jboss7和Java6的地方遇到了同樣的問題,我們在GC文件中得到了NULL並且它們一直在增長。

解決方案是將GC記錄到stdout,然后 stdout 附加到文件:

簡單的例子:

java -verbose:gc >> console.log

顯然使用append(>>)擺脫了文件中某個位置的Java“指針”。 還有一個額外的好處就是沒有重置每個服務器的GC日志,所以我們可以隨着時間的推移得到一些統計數據。

至少IBM PMAT工具在使用GC輸出解析sysout時沒有問題。

最簡單的解決方案有時是最好的:)

雖然我希望Java支持轉換GC日志,但我看到有人之前一直在討論: http//mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2011-April/002061.html

為了解釋null,Java維護一個內部引用來計算縮進的位置,當你移動文件時,它會導致將空字符寫入日志。

我已經看到篡改GC日志文件導致系統崩潰,在寫入日志文件時導致的中止被忽略(請參閱此處的代碼http://pastebin.com/HWkNv3PM )導致JVM繼續忽略錯誤。

當文件重新打開時,我相信位置計數器沒有被重置。

至於如何滾動日志文件的其他想法 - 另請參閱: 在java中滾動垃圾收集器日志

一個簡單的解決方法可能是更改我在我的問題中使用的Java調用:

java -Xloggc:/home/test/test.log -cp / home / test / Test

java -verbose:gc -cp / home / test / Test | tee -a / home / test / test / log

logrotate和cron的配置可以保持不變(即使應該增加cron周期)。

請參閱我在該問題下的評論,以獲取有關Linux中的logrotate和文件處理程序的更多詳細信息的鏈接。 另請參閱brainzzy對Java行為的解釋

而不是java -verbose:gc >> console.log我可以這樣做:java -Xloggc:logs / gc.log >> console.log所以輸出將保存在一個文件中,然后還可以旋轉到console.log?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM