文章目录
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:压缩类空间使用大小
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
测试 项目 JVM调优开发:
-xms1536M -Xmx1536M -Xmn512M -Xss1M -XX:SurvivorRatio=6 -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M
-XX:+UseParNewGC -XX:+UseConcmarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+UseCMSInitiatingOccupancyOnly
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。