首页 > 其他 > 详细

hs_err_pid.log日志,有趣的两个Jvm参数

时间:2020-05-03 22:45:38      阅读:79      评论:0      收藏:0      [点我收藏+]

遇到一个很有意思的问题,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参数了,所以,有机会能遇到,觉得还是很有意思的。

技术分享图片

欢迎关注我的微信公众号《小沈干货》获取更多学习内容。
技术分享图片

 

hs_err_pid.log日志,有趣的两个Jvm参数

原文:https://www.cnblogs.com/wenbinshen/p/12823882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!