JAVA 查看线程、内存

查看运行程序pid

jps —— jdk 自带工具

与linux上的ps类似,用来显示本地的java进程,并显示他们的进程ID
jps 查看示例

jconsole:一个java GUI监视工具

可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
命令行内输入 jconsole, 会弹出下图所示窗口。可以选择进程。
jconsole 使用示例
连接上 进程之后,将会展示如下窗口:可以看到具体的内存使用情况
在这里插入图片描述

windows tasklist

tasklist | findstr java.exe. 可以看到 java 进程,但是看不到具体是哪个应用程序
在这里插入图片描述

根据pid 查看进程相关数据

jinfo

可以输出并修改运行时的java 进程的opts。会展示很多进程相关信息,下图截取了部分内容。

在这里插入图片描述

jstack

jstack pid 查看运行java程序的java stack和native stack的信息。可以轻松得知当前线程的运行情况 。下图是部分截图
在这里插入图片描述
注:这个和 thread dump 是同样的结果。但是thread dump是用kill -3 pid命令,服务器上面少用kill为妙

jstack [-l] pid > xxx.log 将所有线程信息输入到指定文件中
jstack -F [-m] [-l] pid >xxx.log 强制打印栈信息

top

top 找出占用cpu高(或者执行时间很长)的程序pid
top -H -p pid 找出占用cpu高(或执行时间长)的线程pid

jmap

打印出某个java进程(使用pid)内存内的所有对象的情况。
-dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
-h | -help 打印辅助信息
-J 传递参数给jmap启动的jvm.
jmap pid 下图截取了部分内容。
在这里插入图片描述
jmap -dump:format=b,file=heap.txt pid(导出内存,据说对性能有影响,小心使用)
把内存结构全部dump到二进制文件中,通过IBM的HeapAnalyzer和eclipse的MemoryAnalyzer都可以分析内存结构。
在这里插入图片描述

jstat

一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。
jstat -class pid 显示加载class的数量,及所占空间等信息。
jstat -compiler pid 显示VM实时编译的数量等信息。
jstat -gc pid 显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity pid 可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
jstat -gcnew pid new对象的信息。
在这里jstat -gcnew pid插入图片描述
jstat -gcnewcapacity pid: new对象的信息及其占用量。
jstat -gcold pid: old对象的信息。
jstat -gcoldcapacity pid: old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -util pid: 统计gc信息统计。
jstat -printcompilation pid: 当前VM执行的信息。加上两个数字,如:jstat -printcompilation 15900 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题
在这里插入图片描述

一些术语的中文解释:
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
    NGC:年轻代(young)中当前的容量 (字节)

OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT: 持有次数限制
MTT : 最大持有次数限制

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值