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

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

  • 相关阅读:
    java中的subList
    值传递和引用传递
    java程序中有异常处理和没有异常处理的区别
    正则表达式
    poj 3187 三角数问题
    poj 2718 切数问题 穷竭搜索
    ACM 广度优化搜索算法总结
    poj 3669 火星撞地球问题 bfs算法
    poj 2251 三维地图最短路径问题 bfs算法
    ACM 深度优化搜索算法小总结
  • 原文地址:https://www.cnblogs.com/wenbinshen/p/12823882.html
Copyright © 2020-2023  润新知