JVM常用指令以及JVM调优
文章目录
- 1.指令查看进程`jps`
- 2.查看实例大小`jmap -histo 14900 > ./log.txt` 【定位内存】
- 3.查看堆大小信息`jmap -heap 14900`【定位内存】
- 4.堆内存快照dump【定位内存】
- 5.运行线程的信息jstack 【查看线程 飙升的原因】
- 6.查看正在运行的java应用程序的扩展参数 `jinfo`
- 7.jstat命令可以查看堆内存各部分的使用量
1.指令查看进程jps
linux下查看pid
jps -l
或者
ps -ef | grep java
2.查看实例大小jmap -histo 14900 > ./log.txt
【定位内存】
log.txt
num序号
instances 实例数量
bytes 占用空间大小
class name 类名称 【C is a char[]】【S is a short[]】【I is a int[]】【B is a byte[]】
3.查看堆大小信息jmap -heap 14900
【定位内存】
4.堆内存快照dump【定位内存】
jmap ‐dump:format=b,file=eureka.hprof 14660
也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
1. -XX:+HeapDumpOnOutOfMemoryError
2. -XX:HeapDumpPath=./
JVM设置 出现内存溢出的时候,将堆内存快照信息打印到文件内:
‐Xms10M ‐Xmx10M ‐XX:+PrintGCDetails ‐XX:+HeapDumpOnOutOfMemoryError ‐XX:HeapDumpPath=D:\jvm.dump
jvm自带分析工具: jvisualvm
命令工具导入该 dump 文件分析 【文件】—》【装入】
5.运行线程的信息jstack 【查看线程 飙升的原因】
jstack
进程号 查看当前状态下的 运行线程信息
“Thread-1” 线程名
prio=5 优先级=5
tid=0x0000001fgsd000 线程id
pid=0xed64 线程对应本地线程标识
java.lang.Thread.State:BLOCKED 线程状态
Found one Java-level deadlock 发现死锁
jvisualvm 可以检测出现死锁
【查看线程 飙升的原因】
jps查看进程号:
1,使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如19663
2,按H,获取每个线程的内存情况
3,找到内存和cpu占用最高的线程tid,比如196644,转为十六进制得到 0x4cd0,此为线程id的十六进制表示
5,执行 jstack 19663|grep -A 10 4cd0,【注意十六进制需要小写】得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法
6,查看对应的堆栈信息找出可能存在问题的代码
6.查看正在运行的java应用程序的扩展参数 jinfo
查看正在运行的java应用程序扩展参数 : jinfo -flags <pid>
查看java jvm系统参数:jinfo -sysprops <pid>
7.jstat命令可以查看堆内存各部分的使用量
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
命令的格式如下:jstat [-命令选项] [vmid] [间隔时间(毫秒)] [查询次数]
注意:使用的jdk版本是jdk8
jstat -gc pid 最常用,可以评估程序内存使用及GC压力整体情况
S0C:第一个幸存区的大小,单位KB
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位s
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间,单位s
GCT:垃圾回收消耗总时间,单位s
-Xms1536M -Xmx1536M -Xmn600M -Xss1M -XX:SurvivorRatio=6 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly
-Xms1536M 堆空间
-Xmx1536M 堆空间
-Xmn600M 年轻代空间
-Xss1M 栈空间
-XX:SurvivorRatio=6 eden和servior的比值
-XX:MetaspaceSize=256M 元空间
-XX:MaxMetaspaceSize=256M 元空间
-XX:+UseParNewGC 年轻代使用 Parnew
-XX:+UseConcMarkSweepGC 老年代使用 CMS
-XX:CMSInitiatingOccupancyFraction=80 当老年代达到预设值的 80 % 的时候触发 full gc
-XX:+UseCMSInitiatingOccupancyOnly
cms 初始标记 并发标记 重新标记 并发清理 并发重置
G1 初始标记 并发标记 最终标记 筛选回收
测试 项目 JVM调优开发:
-Xms1536M -Xmx1536M -Xmn512M -Xss1M -XX:SurvivorRatio=6 -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+UseCMSInitiatingOccupancyOnly
还没有评论,来说两句吧...