5. JVM调优
2021-07-29 17:54:23 1 举报
JVM调优
作者其他创作
大纲/内容
S1128M
运行时数据区(内存模型)
S064M
\"Thread-1\": 线程名prio=5: 优先级=5tid=0x0000000001fa9e000:线程idnid=0x2d64:线程对应的本地线程标识nidjava.lang.Thread.State:BLOCKED:线程状态
得到线程堆栈信息中这个线程所在行的后面10行,从堆栈中发现导致CPU飙高的调用方法
20分钟有700多M进入老年代
【jinfo -sysprops <pid> 】查看JVM系统参数
【jmap -heap <pid>】 查看堆信息
256M
【jstat -gcnewcapacity <pid> 】jvm 新生代内存统计
top 命令查询占用CPU高的进程
EDEN768M
top -p <pid> 精确定位进程
栈(线程1)-Xss256K
堆
将占用CPU高的线程PID(十进制) 转换为16进制(jstack查询线程的ID为16进制)
【jstat -gc <pid> 1000 10】没1000毫秒执行一次,执行10词
常用基础命令
方法区(元空间)
堆栈参数优化
方法区(元空间)
【jstat -gcoldcapacity <pid> 】jvm 老年代内存统计
每次 Young GC后有多少对象存活和进入老年代
本地方法栈
JVM运行情况预估
【jstat -gc <pid> 】jvm 垃圾回收统计 【jstat -gc <pid> 1000 10】
CPU资源占用飙升排查
【jinfo -flags <pid> 】查看JVM扩展参数
优化案例
新生代-Xmn
运行60秒后占满EDEN
栈(线程1)-Xss默认1M
命令:jstack <线程pid> |grep -A 10 <16进制线程pid>
Full GC的触发频率和每次耗时
程序计数器
按H 获取每个线程内存情况
【jstat -gcold <pid> 】jvm老年代垃圾回收统计
优化总思路
OLD512M
S0128M
S164M
-Xms-Xmx
-Xms1536M -Xmx1536M -Xmn1024M -Xss256K -XX:SurvivorRatio=6 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M-XX:+UseParNewGC-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=92 -XX:+UseCMSInitiatingOccupancyOnly
OLD1G
【jstat -gcnew <pid> 】jvm 新生代垃圾回收统计
【jmap -histo <pid> > ./log.txt】 查看内存信息,实例个数及占用内存大小
-XX:MetaspaceSize-XX:MaxMetaspaceSize
【jstack <pid> 】查看线程状态,查看死锁线程,jvisualvm也能查找死锁
【jstat -gccapacity <pid> 】jvm 堆使用情况及GC
【jps】 查看java进程命令
Young GC的触发频率和毎次耗时
栈(线程2)-Xss默认1M
线程每秒产生6M对象
EDEN384M
年轻代对象增长的速率
0 条评论
下一页