赞
踩
jps(全称:Java Virtual Machine Process Status Tool)是 java 提供的一个用来显示当前所有 java 进程的 pid 的命令。
JVM 统计监测工具
jstat -gc pid
可以评估程序内存使用及GC压力整体情况,常用
jstat -gc pid
1000 10:每间隔1000毫秒执行一次,一共执行10次jstat -gc pidjstat -gccapacity
11711 堆内存统计jstat -gcnew
11711
jstat -gcnewcapacity
11711jstat -gcold
11711jstat -gcoldcapacity
11711jstat -gcmetacapacity
11711jstat -gcutil
11711jstat -class
11711查看正在运行的Java应用程序的扩展参数
jinfo -flags
11711jinfo -sysprops
11711生成堆转储快照,可以用于查看堆内存信息,实例个数以及占用内存大小
jmap -histo
11711jmap -histo:live
11711,建议执行时可以输出到文本中,jmap -histo 11711 > jmapHisto.txtjamp -heap
11711Heap Configuration:
MinHeapFreeRatio = ##在堆的使用率小于40%的时候进行收缩,当Xmx=Xms的时候此配置无效
MaxHeapFreeRatio = ##在堆使用率大于70%的时候进行扩展,当Xmx=Xms的时候此配置无效
MaxHeapSize = ##堆的最大空间
NewSize = ##新生代的大小
MaxNewSize = ##最大的新生代的大小
OldSize = ##老年代的大小
NewRatio = ##新生代中Eden和和Survivor区的比例为 8:1:1
SurvivorRatio =
MetaspaceSize = ##元空间的大小
G1HeapRegionSize = 0 (0.0MB) ##使用G1垃圾收集的区间
虚拟机生成当前线程的快照,用户分析线程出现长时间卡顿的原因,如线程之间死锁,死循环,请求外部资源导致线程长时间等待等问题
jdk的bin安装目录下启动,可以远程(不建议)连接,也看加载dump文件
./jvisualvm
可以单独下载安装mat,下载地址,注意新版需要jdk11+,个人觉得比jvisualvm更好用
使用命令top -p ,显示你的java进程的内存情况,pid是你的java进程号,比如11711
按H,获取每个线程的内存情况
如果java启动后发现cpu居高不下或者异常,找到内存和cpu占用最高的线程tid,比如19664
转为十六进制得到 0x4cd0,此为线程id的十六进制表示
执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调用方法
查看对应的堆栈信息找出可能存在问题的代码
Linux命令行工具vmstat
是一款指定采样周期和次数的功能性监测工具,可以使用它监控进程上下文切换
的情况。
vmstat 1 3 命令行代表每秒收集一次性能指标,总共获取 3次。以下为上图中各个性能指标的注释:
高速缓存
的内存大小(kb)Linux命令行工具pidstat
命令就可以帮助我们监测到具体进程
的上下文切换。
常用参数:
pidstat -w -p pid
命令行,我们可以查看到进程的上下文切换
:
pidstat -w -p pid -t
命令行,我们可以查看到具体线程的上下文切换
:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。