【JVM虚拟机】java命令

java命令

在开发的过程中,不仅有代码编译上的问题,也有线上的问题,而线上的问题就需要我们借助这些命令去查看运行的信息。

1、jps

jps 是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在Linux/unix平台上简单查看当前java进程的一些简单情况。

jps类似Linux/Unix平台上的ps命令,但是jps只查找所有的java应用程序,包括即使没有使用java执行体的那种(例如,定制的启动器)。另外,jps仅查找当前用户的java线程,而不是当前系统中的所有进程。

可以先通过jps -help查看帮助
详细介绍这些参数
-q :只显示pid,不显示class名称.jar文件名和传递给main方法的参数
-m :输出传递给main方法的参数,在嵌入式jvm上可能是null
-l :输出应用程序main.class的完整package名或者应用程序的jar文件完整路径名
-v :输出传递给JVM的参数

2、jinfo

实时查看和调整虚拟机参数
配置信息包括java系统参数和命令行参数,如果在64位虚拟机上运行,需要指定-J-d64参数
如:jinfo-J-d64-sysprops pid
由于打印jvm常用信息可以使用jps命令,所以这个命令使用较少,并且在后续的java版本中可能不再支持
jinfo命令的使用

3、jstat

jstat是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载,内存,垃圾手机,JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。

jstat  -<option> [-t] [-h<lines>] <vmid> [<interval>]]

参数解释:
opiton ——选项,我们一般使用 -gcutil 查看gc情况
vmid ——VM的进程号,即当前运行的java进程号
interval ——间隔时间,单位为秒或者毫秒
count——打印次数,如果缺省则打印无数次

参数interval和count代表查询间隔和次数,如果忽略这两个参数,说明只查询一次

假设需要每250毫秒查询一次进程5828垃圾收集状况,一共查询5次,那命令行如下

jstat -gc 5828 250 5

option
选项option代表着用户希望查询的虚拟机信息,主要分为3类:类装载,垃圾收集和运行期编译状况,具体选项及作用如下:
-class 监视类装载,卸载数量,总空间及类装载所耗费的时间
-gc 监视java堆状况,包括Eden区,2个Survivor区,老年代,永久代等的容量
-gccapacity 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大和最小的空间
-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比-gccause与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew 监视新生代GC的情况
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold 监视老年代GC的状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity 输出永久代使用到的最大和最小空间
-compiler 输出JIT编译器编译过的方法,耗时等信息
-printcomplation 输出已经被JIT编译的方法

4、jmap

常用方法:

jmap -heap +进程号(3469)

查看java堆使用情况
{连接进程ID——显示JVM版本号——显示GC方式——堆内存初始化配置}

jmap -histo:live +进程ID

查看堆内存中对象数量及大小,这个命令执行,JVM会先触发gc,然后再统计信息。

jmap -dump:format=b,file=headDump 进程ID

将要使用的内存的详细情况输出到文件,然后用jhat命令可以参见jhat -port 5000 heapDump在浏览器中访问:http://locahost:5000/查看详细信息
这个命令执行,JVM重新整堆堆的信息转储写入一个文件,堆如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证转储的信息是可靠的,所以会暂停应用。

jmap是jdk自带的工具软件,主要用于打印指定java过程(或核心文件,远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成堆转储

选项:
如果使用不带选项参数的jmap打印共享对象映射,将打印目标虚拟机中加载的每个共享对象的起始地址,映射大小以及共享对象文件的路径全称。
-dump:[live,]format=b,file= 以hprof二进制格式转储java堆到指定filename的文件中。
-live子选项是可选的。如果指定了live子选项,堆中只有活动的对象会被转储。想要浏览堆转储,你可以使用jhat(java的堆分析工具)读取生成的文件。
-finalizerinfo 打印等待终结的对象信息
-heap 打印一个堆的摘要信息,包括使用的GC算法,堆配置信息和代明智堆的使用情况。
-histo[:live] 打印堆的柱状图。其中包括每一个java类,对象数量,内存大小(单位:字节),完全限定的类名。打印的虚拟机内部的类名称将带有一个’*'替换。如果指定了live子选项,则只计算活动的对象。
-permtat 打印的java堆内存的永远保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称 活跃度,地址,父类加载类,它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会打印。
-F 强制模式。如果指定的PID没有响应,请使用JMAP -dump或 jmap-histo选项。此模式下,不支持live子选项。
-h 打印帮助信息。
-help 打印帮助信息。
-J 指定传递给运行jmap的JVM的参数。

总结:
1、如果程序内存不足或经常GC,很有可能存在内存不足情况,这时候就要重新使用java堆Dump查看对象的情况
2、要制作堆Dump可以直接使用jvm自带的jmap命令
3、可以先使用jmap-heap命令查看堆的使用情况,看一下各个堆空间的占用情况。

5、jhat

jhat(java堆分析工具),是一个用来分析java的堆情况的命令。使用jmap可以生产java堆的Dump文件。生成转储文件之后就可以用jhat命令,将转储文件转成html的形式,然后通过http访问可以查看堆情况。(和jmap结合使用)

jhat命令解析会java堆dump并启动一个web服务器,然后就可以在浏览器中查看堆的dump文件了。

使用步骤:
1、jps
使用jps命令查看java进程ID
2、jmap -dump:format=b,file=headDump +进程ID
生成转储文件
3、jhat heapDump
解析java堆转储文件,并启动一个Web服务器
4、然后访问端口

6、jstack

jstack是java虚拟机自带的一种堆栈跟踪工具

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松的知道java程序是如何奔溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

*线程状态
想要通过jstack命令来分析线程的情况,首先要知道线程有哪些状态,下面这些状态是我们使用jstack命令查看线程堆栈信息时可能会看到的线程的几种状态:
NEW :未启动。不会出现在dump中
RUNNABLE:在虚拟机内执行的
BLOCKED:受阻塞并等待监视器锁
WATING:无期限的等待另一个线程的特定操作
TIMED_WATING:有时限的等待另一个线程的指定操作
TERMINATED:已退出的

调用修饰
表示线程在方法调用时,额外的重要的操作。线程Dump分析的重要信息。修饰上方的方法调用。
locked<地址>目标:使用synchronized申请对象锁成功,监视器的拥有者。
waiting to lock<地址>目标:使用synchronized申请对象锁未成功,在等待
waiting on<地址>目标:使用synchronized申请对象锁成功后,释放锁开在等待区等待
parking to wait for<地址>目标:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值