Kubernetes-POD生成 java dump文件

news/2024/11/15 21:49:47/文章来源:https://www.cnblogs.com/Unstoppable9527/p/18422492

目录
  • 背景
  • 配置钩子函数
  • 验证

背景

在今天的线上业务中,某服务频繁重启。经过排查日志和事件信息,确认是由于 OOM(Out of Memory)导致服务重启。为了方便研发团队定位 OOM 的具体原因,我们决定在 OOM 发生时自动生成内存快照(heap dump),供后续分析使用。

关于 OOM 的详细介绍,可以参考这篇博客:https://www.cnblogs.com/klvchen/articles/12448436.html

JVM 提供了一些参数,能在发生 OOM 时自动生成 heap dump:

  • -XX:+HeapDumpOnOutOfMemoryError
  • -XX:HeapDumpPath=/logs/heapdump.hprof

然而,目前还存在两个问题:

  1. 多次重启可能导致 heap dump 覆盖。例如,如果程序发生了两次 OOM,第二次生成的 heap dump 会覆盖第一次的。
  2. 这个参数仅适用于 JVM 内部的 OOM,而 K8s 主动重启服务时并不能生成 heap dump。我们通过 kubectl describe pod 查看重启原因,发现是因为健康检查未响应,K8s 自动重启服务。这类情况并非 JVM 的 OOM,因此上述参数无法帮助生成内存快照。

为了解决 K8s 重启时无法导出 heap dump 的问题,我们可以通过配置 preStop 钩子,在容器停止前生成内存快照。相关命令如下:

  1. 获取进程 ID 为 10 的程序的堆栈信息:
jstack -F 10 >> /logs/thread.dump
  1. 生成堆内存快照:
jmap -dump:format=b,file=/usr/src/logs/dump.hprof 10

通过这样的优化,既能避免 heap dump 被覆盖,又能在 K8s 重启时生成有用的内存快照,帮助排查问题。

配置钩子函数

在command增加

jstack -F $(jps |grep -v Jps | awk '{print $1}') | tee -a /usr/src/logs/thread.dump && jmap -dump:format=b,file=/usr/src/logs/$(date +'%Y-%m-%d_%H%M%S').hprof $(jps |grep -v Jps | awk '{print $1}')"
        lifecycle:preStop:exec:command: ["/bin/sh", "-c", "curl -X PUT \"http://eureka-service:8761/eureka/apps/${POD_NAME}/${POD_IP}:pi6000-mdl-web:8080/status?value=DOWN\" && sleep 30 && jstack -F $(jps |grep -v Jps | awk '{print $1}') | tee -a /usr/src/logs/thread.dump && jmap -dump:format=b,file=/usr/src/logs/$(date +'%Y-%m-%d_%H%M%S').hprof $(jps |grep -v Jps | awk '{print $1}')"]

验证

手动执行 **<font style="color:rgb(244, 116, 102);">kubectl delete pod xxxx</font>**,可以查看到生成的文件了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/800534.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D游戏开发实战:QML与虚幻引擎

3D游戏开发实战:QML与虚幻引擎 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C++扩展开发视频课程 免费QT视频课程 您可以看免费1000+个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化…

掌握IT资产发现的三个步骤

IT 资产生态系统非常复杂,因为资产不断变化,包括新增资产、移除过时资产或修改现有资产。在这种动态环境中,IT 资产管理者很难全面查看所有拥有的资产。 根据Gartner的预测,到 2025 年,大约 30% 的关键基础设施组织将面临安全漏洞。而标准普尔全球评级公司最近的报告指出,…

php8:开启opcache和JIT(php 8.3.9)

一,配置文件中的项: opcache.enable=1 opcache.enable_cli=0 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=240 opcache.save_comments=0 opcache.error_log=/data/logs/phplogs/opache_error.log opcache.enable=1 # …

vulnhub - medium_socnet

一台不错的教学靶机medium_socnet 基本信息 kali ip:192.168.157.161 靶机 ip:192.168.157.179 主机发现与端口扫描 nmap -sT --min-rate 10000 -p- 192.168.157.179 nmap -sT -sV -sC -O -p22,5000 192.168.157.179没什么可利用信息,web页面的输入框不会执行命令 目录扫描 …

【Swagger】Swagger入门和一些常见的问题

什么是Swagger swagger(丝袜哥)是当下比较流行的实时接口文档生成工具。前后端分离后,前后端交流比较重要的东西,就是接口文档。离线文档,最大的弊端就是接口程序发生变动的时候,需要回过头来维护上面的内容,确实比较玛法。 实时接口文档可以根据代码来自动生成相应的接口…

python--多态

多态:对于父类的一个方法,在不同的子类上有不同体现

C# html数据爬取与过滤

1.首先安装第三方HTML数据过滤包  HtmlAgilityPack 我爬取的网站是一个树洞网站:https://i.jandan.net/treehole,他是一个单体网站,不通过api请求,所以只能根据HTML过滤,他的分页是通过base64加密的 这是获取到的部分数据,这是我们需要的有效数据,他是有固定结构的,我…

使用代理进行3389/RDP远程桌面连接,流畅不卡,解决连接海外服务器线路问题卡顿

平时连接window海外服务器的时候,因为是通过IP直连,所以延迟非常高,并且不稳定。 原因:Window默认的远程桌面连接,不支持使用代理方式进行连接,使用的是直连,网络线路非常不稳定解决:使用parallels client客户端进行连接,支持使用代理 下载地址:https://www.parallel…

RK3568串口配置默认上拉

rockchip,pins =/* uart4_rxm0 */<1 RK_PA4 2 &pcfg_pull_up>,/* uart4_txm0 */<1 RK_PA6 2 &pcfg_pull_up>;

idea新版ui调出前进/后退箭头

查看源码或者查看类/方法定义,需要前进或者后退 Jetbrains IDE新UI设置前进/后退导航键_idea设置前进后退-CSDN博客

气象数据

GDAS(Global Data Assimilation System)全球数据同化系统,是美国国家气象局(National Weather Service, NWS)的一部分,它是一个复杂的系统,用于生成全球范围的气象分析数据。 1.FNL大气再分析数据集 是GDAS的最终分析产品,用于历史和气候研究 更新慢 1度的 https://rda…

中电信翼康基于Apache Dolphinscheduler重构“星海济世医疗数据中台”实践经验分享

文章作者:尚志忠 编辑整理:曾辉 行业背景 随着大数据、云计算、5G、人工智能等技术的快速发展,以及医疗信息化建设的不断深入,数据中台作为打通医疗数据融合壁垒、实现数据互通与共享、构建高效数据应用的关键信息平台,正逐渐成为推动医疗行业数字化转型和创新发展的重要力…