1. jps
查看当前正在运行的所有java进程。
1. Jmap
用来查看内存信息,实例个数及占用空间大小
1.1 查看某个java进程信息
jmap -histo pid > ./log.txt
jmap.png
其中:
(1)instances: 实例数量
(2)bytes: 占用空间大小
(3)class name: 类名称
1.2 查看该进程堆信息
(1)jmap -heap pid
查看该进程堆信息.png
(2)查看堆内存dump
jmap -dump:format=b, file=eureka.hprof pid
2. jstack
2.1 查看进程是否死锁
使用命令:jstack pid
2.2 尝试查找cpu占用最高的线程堆栈信息
(1)top -p pid找到java进程内存信息
top -p pid.png
(2)按H,获取每个线程的内存信息
获取每个线程的内存信息.png
(3)找到内存和cpu占用最高的线程tid,比如19664
(4)转为十六进制得到
0x4cd0,此为线程id的十六进制表示
(5)执行jstack 19663|grep
-A 10 4cd0,得到线程堆栈信息中4cd0这个线程所在的位置。
3. jinfo
查看正在运行的java应用的扩展参数。
(1)查看jvm相关参数:
jinfo -flags pid
4. jstat
查看堆内存各个部分的使用量,加载类数量。
4.1 垃圾回收统计
jstat -gc pid,查看垃圾回收器整体情况,以此评估GC压力
jstat -gc pid.png
4.2 评估JVM运行情况
(1)检查年轻代对象增长速度
jstat -gc pid 1000 10(每隔1秒执行1次命令,共执行10次)
(2)优化思路
尽量让每次Young GC后的存活对象小于Survivor区域的50%,都留存在年轻代里。尽量别让对象进入老年
代。尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响。
网友评论