hs_err_pid.log日志,有趣的兩個Jvm參數


遇到一個很有意思的問題,Jvm進程因系統資源不足時會被操作系統kill掉,當守護進程重新拉起該進程時,會產生一個日志文件:hs_err_pid.log,默認情況下這個日志會被生成到工作目錄下。今天為了修改這個默認路徑,復現了一下Jvm進程OOM后Crash的情況。

那么OOM究竟會不會導致Jvm進程被Crash掉呢?今天上網查了下資料和自己測試了下,結果是oom不會導致Jvm進程被Crash,而是oom只會導致當前線程被回收掉。

如何復現這個問題呢?有意思的是,發現了一個很有意思的Jvm參數 -XX:+CrashOnOutOfMemoryError,這個參數的大概意思是:當發生內存溢出的時,JVM就會退出,同時,JVM會產生文本和二進制格式的崩潰日志。

進程Crash解決了,那如何產生oom呢,我這里修改kafka Broker端的內存,降低堆內存,使kafka服務啟動時Jvm內存產生oom錯誤。


oom有了,如何修改hs_err_pid.log的默認路徑呢?有意思的是,又發現了第二個有趣的Jvm參數:-XX:ErrorFile=~/log/hs_err_pid_%p.log,%p的作用是獲取當前進程的pid。

上面兩個Jvm參數添加如下圖示:

是不是現在啟動Kafka進程,等着oom,然后生成hs_err_pid.log就行了呢?

NO!

這里java虛擬機又給我反饋了個問題,它不識別-XX:+CrashOnOutOfMemoryError參數,它竟然跟我說它不認識它!!!

 

 

好吧,我大聲告訴你,jdk在1.8.0_92版本修復了這個問題,所以升級你的jdk到這個版本之上吧。

萬事大吉,只欠啟動,完事。

本文介紹的兩個參數算是比較冷門的Jvm參數了,所以,有機會能遇到,覺得還是很有意思的。

歡迎關注我的微信公眾號《小沈干貨》獲取更多學習內容。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM