登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
科技
›
使用 Arthas 在 Pod PreStop Hook 中收集诊断数据 ...
使用 Arthas 在 Pod PreStop Hook 中收集诊断数据
[ 复制链接 ]
阎一禾
2025-6-16 15:56:17
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 终止前捕获关键运行时状态。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
软件
签约作者
程序园优秀签约作者
发帖
阎一禾
2025-6-16 15:56:17
关注
0
粉丝关注
14
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9986
背竽
9992
猷咎
9990
4
凶契帽
9990
5
里豳朝
9990
6
处匈跑
9990
7
黎瑞芝
9990
8
恐肩
9988
9
终秀敏
9988
10
杭环
9988
查看更多