码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JVM实战(二) :关闭dump配置,使服务快速恢复


    1. Open JDK中与OOM有关的参数

    • 通过使用如下命令,查看所有的JVM选项的实际值:

      java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
      
      • 1
    • 发现Open JDK 8中,与OOM有关的参数如下

      -XX:+|-HeapDumpOnOutOfMemoryError
      -XX:HeapDumpPath
      -XX:OnOutOfMemoryError
      -XX:+|-CrashOnOutOfMemoryError
      -XX:+|-ExitOnOutOfMemoryError
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • -XX:+HeapDumpOnOutOfMemoryError:应用程序OOM时,默认在当前工作目录产生java_pidxxx.hprof的堆转储文件

    • 若需指定dump文件的路径和文件名,可以使用-XX:HeapDumpPath=/path/to/java_heapdump进行设置

    • 在实际应用过程中,只是产生dump文件,并不能满足需求,可能还需要再程序OOM时,及时发出告警信息以通知运维人员。这时,可以使用-XX:OnOutOfMemoryError=self-definded-command,执行自定义的shell脚本以实现OOM告警

    • 在程序OOM时,如果想快速退出程序,可以选择-XX:+CrashOnOutOfMemoryError或-XX:+ExitOnOutOfMemoryError,二者的区别可以参考《java命令中的options》的3.4节《Advanced Serviceability Options》

    2. 线上服务关闭dump配置

    • 在之前的工作中,为了分析OOM的原因并向运维人员发送告警,jvm的配置如下

      -XX:+HeapDumpOnOutOfMemoryError
      -XX:HeapDumpPath=/opt/bidata_dump/
      -XX:OnOutOfMemoryError=/opt/bigdata/bin/oom_process.sh
      -XX:+ExitOnOutOfMemoryError
      
      • 1
      • 2
      • 3
      • 4
    • 后来,在服务运行的过程中发现,堆内存200GB+的线上服务,产生的dump文件差不多也是200GB+,而且产生dump文件大约需要20min,在这期间服务处于僵死状态

    • 由于人力原因,目前不会基于dump文件进行OOM原因分析,我们更期望服务在OOM后能快速退出,借助我们的服务探活作业,快速重启服务

    • 因此,将OOM配置修改如下,只保留-XX:+ExitOnOutOfMemoryError配置

      -XX:+ExitOnOutOfMemoryError
      
      • 1
    • OOM时,-XX:+ExitOnOutOfMemoryError会在标准输出中打印如如下的信息(just an example),这些信息会重定向run.log中

      Terminating due to java.lang.OutOfMemoryError: Java heap space
      
      • 1
    • 基于这一事实,在服务探活作业中增加如下逻辑:

      • 若发现服务已退出,则尝试获取run.log的内容,分析服务是否因为OOM而退出
      • 然后在服务重启告警中,加上服务失败的原因(OOM 或 unknown reason)

    3. 后记

    • 如何开启dump配置,并执行shell脚本:JVM实战(一): dump文件的产生以及执行shell脚本
    • 如需仔细了解OOM有关的JVM参数,可以参考《java命令中的options》,或者直接阅读oracle官方文档:Advanced Serviceability Options
    • 相关参考资料:
      • OutOfMemoryError related JVM arguments
      • OOM原因分析:3.2 Understand the OutOfMemoryError Exception
  • 相关阅读:
    深入理解 python 虚拟机:字节码教程(3)——深入剖析循环实现原理
    Ubuntu:修改shell环境变量
    Cesium 问题:加载 geojson 数据量大浏览器会崩,使用primitive方式加载
    管控软件开发进度 4大关键项需要重视
    深度 | 新兴软件研发范式崛起,云计算全面走向 Serverless 化
    MEMS传感器的原理与构造——单片式硅陀螺仪
    【软件测试】linux命令-引用符号(反斜杠\、单引号‘‘、双引号““)
    Leetcode: 645.错误的集合 题解【超详细】
    idea配置Git以及操作
    java面试题-微服务面试题
  • 原文地址:https://blog.csdn.net/u014454538/article/details/127269977
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号