JVM-工具 jps jstat jinfo

JPS
ps主要用来输出JVM中运行的进程状态信息,实际中这是最常用的命令,其他工具基本都是先要使用jps查看出当前有哪些Java进程,获取该Java进程的id后再对该进程进行处理。
其可配置参数有:
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数

例如
[root@zk01 ~]# jps -ml
7872 org.apache.zookeeper.server.quorum.QuorumPeerMain /usr/apps/zk/zk3.4/bin/…/conf/zoo.cfg
20471 org.apache.catalina.startup.Bootstrap start
28823 sun.tools.jstatd.Jstatd
28874 sun.tools.jps.Jps -ml
17919 kafka.Kafka …/config/server.properties

[root@zk01 ~]# jps -m
7872 QuorumPeerMain /usr/apps/zk/zk3.4/bin/../conf/zoo.cfg
28885 Jps -m
20471 Bootstrap start
28823 Jstatd
17919 Kafka ../config/server.properties

可以通过 jps 192.168.68.135 查看远程机器的 java进程,不过需要先在远程机器上 启动 Jstatd 。
直接启动会报一下错误:

 [root@zk01 ~]# jstatd
Could not create remote object
access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
        at java.security.AccessController.checkPermission(AccessController.java:884)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.System.setProperty(System.java:792)
        at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)

需要创建一个安全策略文件如下:

[root@zk01 ~]# vi /usr/apps/java/my.policy
grant codebase "file:/usr/apps/java/jdk1.8.0_73/lib/tools.jar" {
permission java.security.AllPermission;
};

然后启动即可

[root@zk01 ~]# jstatd -J-Djava.security.policy=/usr/apps/java/my.policy

在刚开始 的时候即使增加了 策略文件,启动仍然报上述异常。然后 我将目录切换到JAVA_HOME/bin 下去执行就可以正常启动了。之后在到其他目录下执行也没有任何问题。

然后 就可以远程服务器的 java进程:

[root@zk01 ~]# jps 192.168.68.135
7872 QuorumPeerMain
29024 Jstatd
29044 Jps
20471 Bootstrap
17919 Kafka
[root@zk01 ~]# 

jstat
jstat的主要作用就是对Java应用程序的资源和性能进行实时监控的命令行工具,主要包括GC、内存、垃圾收集情况和jit编译信息 等。
jstat - [-t] [-h] [ []]
option 常见的都是使用-gcutil查看gc情况,其他可选项见下图。
vmid : VM的进程号,即当前运行的java进程号。
interval : 间隔时间,单位为秒或毫秒
count:打印次数,如果缺省则打印无数次。
比如:以下命令每秒打印一次java垃圾回收次数及时间信息。一共打印10次

[root@zk01 ~]# jstat -gcutil 20471 1000 10
    S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572
  0.05   0.00  67.90  63.03  96.83  92.81    320    2.210     2    0.362    2.572

结果字段说明:
S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
s1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E 年轻代中Eden已使用的占当前容量百分比
O old代已使用的占当前容量百分比
M 元空间(MetaspaceSize)已使用的占当前容量百分比
CCS 压缩使用比例
YGC 年轻代垃圾回收次数
YGC 年轻代垃圾回收消耗时间
FGC 老年代垃圾回收次数
FGCT 老年代垃圾回收消耗时间
GCT 垃圾回收消耗总时间

查看支持的option

[root@zk01 ~]# jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

在这里插入图片描述

详情参考:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

jinfo
jinfo用于打印指定Java进程、核心文件或远程调试服务器的Java配置信息。配置信息包括Java系统属性、Java虚拟机命令行标识参数

jinfo -flags process_id

[root@zk01 ~]# jinfo -flags 20471
Attaching to process ID 20471, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.73-b02
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=322961408 -XX:MaxNewSize=107610112 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=6946816 -XX:OldSize=14024704 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps 
Command line:  -Djava.util.logging.config.file=/usr/apps/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/usr/apps/tomcat -Dcatalina.home=/usr/apps/tomcat -Djava.io.tmpdir=/usr/apps/tomcat/temp

查看某一个参数

[root@zk01 ~]# jinfo -flag NewSize 20471
-XX:NewSize=6946816

查看JAVA系统参数

[root@zk01 ~]# jinfo -sysprops 20471
Attaching to process ID 20471, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.73-b02
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.73-b02
sun.boot.library.path = /usr/apps/java/jdk1.8.0_73/jre/lib/amd64
java.protocol.handler.pkgs = org.apache.catalina.webresources
shared.loader = 
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.util.logging.config.file = /usr/apps/tomcat/conf/logging.properties
tomcat.util.buf.StringCache.byte.enabled = true
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD

设置取消参数设置

[root@zk01 ~]# jinfo -flag PrintGCDetails 20471
-XX:-PrintGCDetails
[root@zk01 ~]# jinfo -flag +PrintGCDetails 20471
[root@zk01 ~]# jinfo -flag PrintGCDetails 20471
-XX:+PrintGCDetails
[root@zk01 ~]# jinfo -flag -PrintGCDetails 20471
[root@zk01 ~]# jinfo -flag PrintGCDetails 20471
-XX:-PrintGCDetails

猜你喜欢

转载自blog.csdn.net/zhangxm_qz/article/details/88580404