GC调优实战

140 阅读1分钟

1. jdk tool api

常用命令

# jmap查看堆信息
jmap -histo $pid

jmap -heap $pid

# 堆dump
jmap -dump:format=b,file=<application_name>.hprof $pid

# 保存在本地,使用工具查看
scp <remote_user>@<remote_ip>:<remote_dir>/<application_name>.hprof <local_dir>

# 堆溢出时自动导出
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

# jstack查看线程信息
jstack $pid

# 查看指定进程
top -H -p <pid>
# 使用 -H 查看threads 找到cpu使用率高的线程
# 将线程的pid,转换为16进制,
# 如进程的pid为19727,线程的pid为19931,19931=>0x4ddb
jstack 19727 | grep -A 10 4ddb
# 此命令查看此线程运行详情

# jinfo,查看应用程序的扩展参数
# jvm配置参数
jinfo -flags $pid
# java系统参数
jinfo -sysprops $pid

推荐阅读-jstat:
jstat官方命令参考手册

# jstat,统计工具(gc的分析)

jstat outputOptions [-t] [-h lines] vmid [interval [count]]

jstat -gc
jstat -gccapacity
jstat -gcnew
jstat -gcnewcapacity
jstat -gcold
jstat -gcoldcapacity
jstat -gcmetacapacity
jstat -gcutil
jstat -gccause

jstat -gc $pid 最常用,可以评估程序内存使用及GC压力整体情况

常用示例: jstat -gc $pid 300000 10
每300000ms执行一次命令,总共执行10次

执行 jstat -gc $pid 300000 10,观察eden,survivor,old的区内存变化情况

. arthas-开源诊断工具

后续继续补充