登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
科技
›
使用 Arthas 在 Pod PreStop Hook 中收集诊断数据 ...
使用 Arthas 在 Pod PreStop Hook 中收集诊断数据
[ 复制链接 ]
阎一禾
2025-6-16 15:56:17
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
Arthas 是 Java 诊断的神器,非常适合在 Kubernetes PreStop Hook 中收集关键诊断数据。相比基础 JDK 工具,Arthas 提供了更强大的实时诊断能力,且能以异步非阻塞方式执行。
最佳实践:Arthas PreStop Hook 配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-app
spec:
template:
spec:
containers:
- name: java-app
image: your-java-image
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
- |
# 下载 Arthas
wget -q -O /tmp/arthas.zip https://arthas.aliyun.com/arthas-boot.jar
unzip -o -d /tmp /tmp/arthas.zip
# 启动 Arthas 诊断任务
java -jar /tmp/arthas-boot.jar --async-dump=10m -c "batch-script /diagnostic/arthas_script" -p 1
# 立即退出 PreStop,让 Arthas 在后台继续收集
exit 0
volumeMounts:
- name: diagnostic-data
mountPath: /diagnostic
volumes:
- name: diagnostic-data
persistentVolumeClaim:
claimName: diagnostic-pvc
复制代码
高效 Arthas 诊断脚本设计
创建 /diagnostic/arthas_script 内容:
# 1. 基本系统信息
sysenv > /diagnostic/sysenv.txt
sysprops > /diagnostic/sysprops.txt
jvm > /diagnostic/jvm_info.txt
# 2. 线程分析 (最耗CPU的5个线程)
thread -n 5 > /diagnostic/thread_top5.txt
thread --state BLOCKED > /diagnostic/thread_blocked.txt
# 3. 内存状态 (轻量级快速收集)
dashboard -n 1 > /diagnostic/dashboard_snapshot.txt
memory > /diagnostic/memory_summary.txt
# 4. 类加载分析
classloader -t > /diagnostic/classloader_tree.txt
# 5. 方法热点分析 (采样5秒)
profiler start --duration 5 --file /diagnostic/cpu_profiler.html --format html
# 6. 堆直方图 (轻量替代堆转储)
vmtool --action getInstances --className java.lang.Object --limit 100 --express 'instances.length' > /diagnostic/heap_histo.txt
# 7. 网络状态
netstat > /diagnostic/netstat.txt
# 8. 锁竞争分析
monitor -c 5 java.util.concurrent.locks.ReentrantLock acquire > /diagnostic/lock_contention.txt
# 9. GC 行为分析
vmtool --action forceGc > /diagnostic/force_gc.txt
jfr start --dump-on-exit --filename /diagnostic/gc_events.jfr
# 10. 慢方法追踪
trace *StringUtils isBlank '#cost>100' > /diagnostic/slow_methods.txt
# 退出 Arthas
stop
复制代码
Arthas PreStop 设计优势
特性
传统 JDK 工具
Arthas 方案
执行时间
可能超时后台异步执行(10分钟宽限)
数据完整性
只能获取当时快照可采集一段时间的趋势
内存影响
可能触发额外 GC低开销采样
诊断深度
基础数据方法级跟踪/锁竞争分析
输出格式
纯文本支持 HTML/JFR 等格式
分析复杂度
需事后分析自带火焰图等可视化
诊断数据持久化方案
确保 Arthas 收集的数据安全存储:
1. PV/PVC 配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: diagnostic-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-storage
resources:
requests:
storage: 5Gi
复制代码
2. 云存储上传
在 Arthas 脚本最后添加上传逻辑:
# 上传到 S3/MinIO
aws s3 cp /diagnostic/ s3://diagnostic-bucket/${POD_NAME}/ --recursive
# 或者使用 Kubernetes Job 事后处理
kubectl create job --from=cronjob/diagnostic-uploader ${POD_NAME}-upload
复制代码
进阶诊断场景
1. OOM 特定分析
# 检查堆外内存
vmtool --action getInstances --className java.nio.DirectByteBuffer --express 'instances.length'
# 分析 Metaspace
classloader -stats
复制代码
2. 死锁定位
# 检测死锁
thread -b | tee /diagnostic/deadlock.txt
# 如果死锁存在,深度跟踪
stack java.lang.Object wait -n 5
复制代码
3. 内存泄漏追踪
# 跟踪指定类实例创建
monitor -c 5 com.example.LeakyClass <init>
复制代码
安全与性能优化
# 1. 控制 Arthas 内存使用
java -XX:MaxRAMPercentage=10 -jar /tmp/arthas-boot.jar ...
# 2. 使用只读 Volume 存储脚本
volumeMounts:
- name: arthas-scripts
mountPath: /diagnostic/scripts
readOnly: true
# 3. 限制诊断时间
timeout 300s java -jar ... # 5分钟超时
复制代码
诊断数据分析自动化
# 创建自动分析任务
kubectl create job analyze-${POD_NAME} \
--image=diagnostic-analyzer:latest \
-- /analyzer.sh s3://diagnostic-bucket/${POD_NAME}
复制代码
故障诊断流程
graph LR
A[Pod Terminating] --> B[PreStop Hook]
B --> C[启动 Arthas 诊断]
C --> D[收集系统状态]
C --> E[内存快照]
C --> F[线程分析]
C --> G[方法级追踪]
D --> H[持久存储]
E --> H
F --> H
G --> H
H --> I[自动分析服务]
I --> J[生成报告]
J --> K[告警通知]
复制代码
使用 Arthas 的 PreStop Hook 方案相比传统方式有以下优势:
零侵入性
:不修改应用代码
高安全性
:在容器终止前异步收集
深度诊断
:支持方法级追踪
低开销
:采样技术避免压垮应用
可视化
:自带火焰图等高级分析
此方案特别适合生产环境中的复杂问题诊断,能最大程度在 Pod 终止前捕获关键运行时状态。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
使用
Arthas
Pod
PreStop
Hook
相关帖子
使用i2s遇到的问题
使用_mm_stream_si128加速 Memory-Bound
一步一步学习使用LiveBindings(15)TListView进阶使用
VUE中使用AXIOS包装API代理
K8S 中使用 YAML 安装 ECK
OpenCVSharp:学习连通性检测的使用
如何使用 vxe-gantt table 甘特图来实现多个维度视图展示
记录 Windows系统开启hyper-v ,部分端口被保留,导致端口不能使用而报错的问题
Claude Code 使用 Skills
如何使用DashVector的多向量检索
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
使用i2s遇到的问题
1
378
肇默步
2025-12-11
业界
使用_mm_stream_si128加速 Memory-Bound
1
291
卓卞恻
2025-12-11
业界
一步一步学习使用LiveBindings(15)TListView进阶使用
0
292
徙办
2025-12-12
安全
VUE中使用AXIOS包装API代理
1
534
峰邑
2025-12-12
业界
K8S 中使用 YAML 安装 ECK
0
739
全跺俚
2025-12-12
业界
OpenCVSharp:学习连通性检测的使用
0
167
颜清华
2025-12-13
代码
如何使用 vxe-gantt table 甘特图来实现多个维度视图展示
1
788
晚能
2025-12-13
安全
记录 Windows系统开启hyper-v ,部分端口被保留,导致端口不能使用而报错的问题
0
199
溜椎干
2025-12-15
安全
Claude Code 使用 Skills
0
215
王妍芳
2025-12-16
业界
如何使用DashVector的多向量检索
0
242
别萧玉
2025-12-16
回复
(4)
揿纰潦
2025-10-24 02:50:20
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
欧阳雪枫
2025-11-12 09:55:10
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享,学习下。
百杲憔
2025-11-24 03:47:10
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
笃迩讦
2025-11-29 18:21:49
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
阎一禾
2025-11-29 18:21:49
关注
0
粉丝关注
20
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
246
RSA加密
316
pydash原型链污染
176
大模型榜单周报(2025/12/08—2025/12/12)
849
当你不再迷信“最强模型”,系统设计才刚刚
876
软件i2c
301
2025年专业起名老师联系方式汇总:全国资深
652
解码IP协议号:网络世界的“货物运单”
712
Python Selenium 漫步指南:从入门到精通
643
AI 付费模式终极对比:ChatGPT、Gemini、Cl
838
JSAPIThree 加载 3D Tiles 学习笔记:大规
358
LLM 工具调用的范式演进与认知模型集成
355
Requirements Engineering with AI for Con
343
【节点】[Adjustment-WhiteBalance节点]原
303
上海专业建筑维修服务解析:标准化流程如何
947
【分析式AI】-带你弄懂XGBoost模型
731
【分析式AI】-带你弄懂XGBoost模型
53
【分析式AI】-带你弄懂XGBoost模型
274
C语言之统计天数
241
如何使用DashVector的多向量检索
272
【分析式AI】-朴素贝叶斯算法模型