Java性能数据收集指南

Java性能数据收集指南

1. Java性能数据收集指南

1.1 性能指标分类

1.1.1 系统层面
  1. CPU相关

    • CPU使用率
    • 用户态/内核态时间
    • Load Average
    • 上下文切换次数
  2. 内存相关

    • 物理内存使用
    • 交换空间使用
    • 页面置换率
  3. 磁盘IO

    • IOPS
    • 吞吐量
    • 响应时间
    • 队列长度
  4. 网络

    • 网络吞吐量
    • 连接数
    • 网络延迟
    • 丢包率
1.1.2 JVM层面
  1. 堆内存

    • 各代内存使用量
    • GC频率和时间
    • 对象分配率
  2. 线程

    • 线程数量
    • 线程状态分布
    • 死锁检测
  3. 类加载

    • 已加载类数量
    • 类加载时间
    • 元空间使用情况

1.2 数据收集工具

1.2.1 系统工具
  1. Linux常用命令
CPU信息
top -H -p <pid>
vmstat 1
mpstat -P ALL 1
内存信息
free -m
vmstat -s
IO信息
iostat -xz 1
iotop
网络信息
netstat -antp
sar -n DEV 1
  1. JDK工具
查看JVM进程
jps -mlv
查看GC情况
jstat -gcutil <pid> 1000
查看堆内存
jmap -heap <pid>
导出堆转储
jmap -dump:format=b,file=heap.bin <pid>
查看线程状态
jstack <pid>
1.2.2 可视化工具
  1. JVisualVM
  • 配置启动参数
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
  1. Arthas
  • 常用命令
启动Arthas
java -jar arthas-boot.jar
线程分析
thread -n 3 # 显示前3个最忙的线程
thread -b # 找出当前阻塞其他线程的线程
内存分析
memory # 查看内存信息
heapdump # 导出堆转储文件
类加载分析
classloader # 查看类加载信息

1.3 性能数据收集方案

1.3.1 基础监控
monitor.sh - 基础监控脚本
系统信息收集
echo "=== System Info ===" > monitor.log
date >> monitor.log
uptime >> monitor.log
CPU使用率
echo "=== CPU Usage ===" >> monitor.log
top -bn1 | head -n 5 >> monitor.log
内存使用
echo "=== Memory Usage ===" >> monitor.log
free -m >> monitor.log
JVM信息
echo "=== JVM Info ===" >> monitor.log
jstat -gcutil $PID >> monitor.log
1.3.2 APM工具集成
  1. Spring Boot Actuator
<!-- pom.xml -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. Prometheus + Grafana
    prometheus.yml
crape_configs:
job_name: 'spring-boot'
metrics_path: '/actuator/prometheus'
static_configs:
targets: ['localhost:8080']

1.4 性能数据分析方法

1.4.1 CPU分析
  1. 高CPU使用率排查
    找出CPU使用率最高的线程
    top -Hp
    转换线程ID为16进制
    printf “%x\n” <thread_id>
    查看线程栈
    jstack | grep <hex_thread_id> -A 30
1.4.2 内存分析
  1. 堆内存分析
导出堆转储
jmap -dump:live,format=b,file=heap.dump <pid>
使用MAT分析
关注以下方面:
- 大对象
- 重复对象
- 内存泄漏
  1. GC分析
查看GC详细信息
jstat -gcutil <pid> 1000 10
分析GC日志
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/path/to/gc.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值