导航:首页 > 程序命令 > linuxjvm监控命令

linuxjvm监控命令

发布时间:2023-02-03 14:44:35

‘壹’ linux上如何安装jstatd服务

命令是一个RMI Server应用程序,提供了对JVM的创建和结束监视,也为远程监视工具提供了一个可以attach的接口

options
-nr 当一个存在的RMI Registry没有找到时,不尝试创建一个内部的RMI Registry
-p port 端口号,默认为1099
-n rminame 默认为JStatRemoteHost;如果多个jstatd服务开始在同一台主机上,rminame唯一确定一个jstatd服务
-J jvm选项

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:323) at java.security.AccessController.checkPermission(AccessController.java:546) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.System.setProperty(System.java:727) at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)

这是因为没有给jstatd指定安全策略

创建安全策略文件,并命名为jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};

再次启动
C:\Program Files\Java\jdk1.6.0_16\bin>jstatd -J-Djava.security.policy=jstatd.all.policy

利用jps查看正在运行的java命令
jps
C:\Documents and Settings\lulu>jps
4892 Bootstrap
1296 Jstatd
4484 Jps
3332 org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar

此时就可以使用jvisualvm.exe以远程的方式监控JVM相关信息了。
更多例子
(1)使用内部RMI Registry
jstatd -J-Djava.security.policy=all.policy (默认端口为1099)
(2)使用外部RMI Registry
a)使用默认值
rmiregistry&
jstatd -J-Djava.security.policy=all.policy
b)使用2020端口
rmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020
c)使用2020端口,使用rminame
rmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName
(3)RMI Registry已经启动,不创建内部RMI Registry
jstatd -J-Djava.security.policy=all.policy -nr
(4)RMI日志能力
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true

‘贰’ 如何jvm监控linux服务器

如何配置visualvm监控
visualvm支持在Linux和windows上启用图形界面监控jvm的资源,但是如何可以使我们在windows上监控到远程linux服务器资源,这还需要做一些配置,此文是在原文基础上做了更改的,希望对大家能有所帮助。
(1)首先要修改JDK中JMX服务的配置文件,以获得相应的权限:
进入$JAVA_HOME所在的根目录的/jre/lib/management子目录下,
a. 将jmxremote.password.template文件复制为jmxremote.password
b. 调整jmxremote.access和jmxremote.password的权限为只读写,可以使用如下命令
chmod 600 jmxremote.access jmxremote.password
c. 打开jmxremote.password文件,去掉
# monitorRole QED
# controlRole R&D
这两行前面的注释符号
(2)修改env.sh
打开env.sh文件,并在JVM的启动配置中添加如下信息:
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.20.150.218 其他配置”
这几个配置的说明如下:
-Dcom.sun.management.jmxremote.port:这个是配置远程connection的端口号的,要确定这个端口没有被占用
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false:这两个是固定配置,是JMX的远程服务权限的
-Djava.rmi.server.hostname:这个是配置server的IP的,要使用server的IP最好在机器上先用hostname –i看一下IP是不是机器本身的IP,如果是127.0.0.1的话要改一下,否则远程的时候连不上,目前我们的server上我已经都改好了
(3)Windows客户端配置
JDK 1.6版本自带visualvm,只需要进到bin目录下启动即可
启动后页面比较简洁,配置也很简单:
a. 点击左侧菜单的add Remote host,输入server的IP,然后再advanced settings里配置端口(注意这个端口要和server上的端口一致)
b. 右击刚才配置的IP,选择JMX connection方式,再次输入端口,就可以监视到JVM资源了

‘叁’ JVM调优的常见命令行工具有哪些

JVM调优的常见命令工具包括:
1)jps命令用于查询正在运行的JVM进程,
2)jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据
3)jinfo用于查询当前运行这的JVM属性和参数的值。
4)jmap用于显示当前Java堆和永久代的详细信息
5)jhat用于分析使用jmap生成的mp文件,是JDK自带的工具
6)jstack用于生成当前JVM的所有线程快照,线程快照是虚拟机每一条线程正在执行的方法,目的是定位线程出现长时间停顿的原因。

‘肆’ jvm 性能调优工具之 jstat 命令详解

Jstat名称:Java Virtual Machine statistics monitoring tool

功能描述:

Jstat是JDK自带的一个轻量级小工具。它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

命令用法:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
注意:使用的jdk版本是jdk8。

C:\Users\Administrator>jstat -helpUsage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] Definitions: <option> An option reported by the -options option <vmid> Virtual Machine Identifier. A vmid takes the following form: <lvmid>[@<hostname>[:<port>]] Where <lvmid> is the local vm identifier for the target Java virtual machine, typically a process id; <hostname> is the name of the host running the target Java virtual machine; and <port> is the port number for the rmiregistry on the target host. See the jvmstat documentation for a more complete description of the Virtual Machine Identifier. <lines> Number of samples between header lines. <interval> Sampling interval. The following forms are allowed: <n>["ms"|"s"] Where <n> is an integer and the suffix specifies the units as milliseconds("ms") or seconds("s"). The default units are "ms". <count> Number of samples to take before terminating. -J<flag> Pass <flag> directly to the runtime system.
option:参数选项
-t:可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h:可以在周期性数据输出的时候,指定输出多少行以后输出一次表头
vmid:Virtual Machine ID( 进程的 pid)
interval:执行每次的间隔时间,单位为毫秒
count:用于指定输出多少次记录,缺省则会一直打印
option 可以从下面参数中选择

jstat -options

-class 用于查看类加载情况的统计
-compiler 用于查看HotSpot中即时编译器编译情况的统计
-gc 用于查看JVM中堆的垃圾收集情况的统计
-gccapacity 用于查看新生代、老生代及持久代的存储容量情况
-gcmetacapacity 显示metaspace的大小
-gcnew 用于查看新生代垃圾收集的情况
-gcnewcapacity 用于查看新生代存储容量的情况
-gcold 用于查看老生代及持久代垃圾收集的情况
-gcoldcapacity 用于查看老生代的容量
-gcutil 显示垃圾收集信息
-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因
-printcompilation 输出JIT编译的方法信息
示例:

1.-class 类加载统计

[root@hadoop ~]# jps #先通过jps获取到java进程号(这里是一个zookeeper进程)3346 QuorumPeerMain7063 Jps[root@hadoop ~]# jstat -class 3346 #统计JVM中加载的类的数量与sizeLoaded Bytes Unloaded Bytes Time 1527 2842.7 0 0.0 1.02
Loaded:加载类的数量
Bytes:加载类的size,单位为Byte
Unloaded:卸载类的数目
Bytes:卸载类的size,单位为Byte
Time:加载与卸载类花费的时间
2.-compiler 编译统计

[root@hadoop ~]# jstat -compiler 3346 #用于查看HotSpot中即时编译器编译情况的统计Compiled Failed Invalid Time FailedType FailedMethod 404 0 0 0.19 0
Compiled:编译任务执行数量
Failed:编译任务执行失败数量
Invalid:编译任务执行失效数量
Time:编译任务消耗时间
FailedType:最后一个编译失败任务的类型
FailedMethod:最后一个编译失败任务所在的类及方法
3.-gc 垃圾回收统计

[root@hadoop ~]# jstat -gc 3346 #用于查看JVM中堆的垃圾收集情况的统计 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 128.0 128.0 0.0 128.0 1024.0 919.8 15104.0 2042.4 8448.0 8130.4 1024.0 996.0 7 0.019 0 0.000 0.019
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:当前压缩类空间的容量 (字节)
CCSU:当前压缩类空间目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
4.-gccapacity 堆内存统计

[root@hadoop ~]# jstat -gccapacity 3346 #用于查看新生代、老生代及持久代的存储容量情况 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0[root@hadoop ~]# jstat -gccapacity -h5 3346 1000 #-h5:每5行显示一次表头 1000:每1秒钟显示一次,单位为毫秒 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量(字节)
OGC:old代当前新生成的容量 (字节)
OC:Old代的容量 (字节)
MCMN:metaspace(元空间)中初始化(最小)的大小 (字节)
MCMX:metaspace(元空间)的最大容量 (字节)
MC:metaspace(元空间)当前新生成的容量 (字节)
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
5.-gcmetacapacity 元数据空间统计

[root@hadoop ~]# jstat -gcmetacapacity 3346 #显示元数据空间的大小MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
6.-gcnew 新生代垃圾回收统计

[root@hadoop ~]# jstat -gcnew 3346 #用于查看新生代垃圾收集的情况S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
TT:持有次数限制
MTT:最大持有次数限制
DSS:期望的幸存区大小
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
7.-gcnewcapacity 新生代内存统计

[root@hadoop ~]# jstat -gcnewcapacity 3346 #用于查看新生代存储容量的情况NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1CMX:年轻代中第二个survivor(幸存区)的最大容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
8.-gcold 老年代垃圾回收统计

[root@hadoop ~]# jstat -gcold 3346 #用于查看老年代及持久代垃圾收集的情况MC MU CCSC CCSU OC OU YGC FGC FGCT GCT8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020
MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
9.-gcoldcapacity 老年代内存统计

[root@hadoop ~]# jstat -gcoldcapacity 3346 #用于查看老年代的容量OGCMN OGCMX OGC OC YGC FGC FGCT GCT15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
OGCMN:old代中初始化(最小)的大小 (字节)OGCMX:old代的最大容量(字节)OGC:old代当前新生成的容量 (字节)OC:Old代的容量 (字节)YGC:从应用程序启动到采样时年轻代中gc次数FGC:从应用程序启动到采样时old代(全gc)gc次数FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)GCT:从应用程序启动到采样时gc用的总时间(s) 在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
10.-gcutil 垃圾回收统计

[root@hadoop ~]# jstat -gcutil 3346 #显示垃圾收集信息S0 S1 E O M CCS YGC YGCT FGC FGCT GCT52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
M:元数据区已使用的占当前容量百分比
CCS:压缩类空间已使用的占当前容量百分比
YGC :从应用程序启动到采样时年轻代中gc次数
YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
FGC :从应用程序启动到采样时old代(全gc)gc次数
FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
11.-gccause

[root@hadoop ~]# jstat -gccause 3346 #显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
LGCC:最后一次GC原因
GCC:当前GC原因(No GC 为当前没有执行GC)
12.-printcompilation JVM编译方法统计

[root@hadoop ~]# jstat -printcompilation 3346 #输出JIT编译的方法信息Compiled Size Type Method421 60 1 sun/nio/ch/Util$2 clear
Compiled:编译任务的数目
Size:方法生成的字节码的大小
Type:编译类型
Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的
远程监控

与jps一样,jstat也支持远程监控,同样也需要开启安全授权,方法参照jps。

C:\Users\Administrator>jps 192.168.146.1283346 QuorumPeerMain3475 JstatdC:\Users\Administrator>jstat -gcutil [email protected] S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 52.97 0.00 65.15 13.92 97.39 98.02 8 0.020 0 0.000 0.020

‘伍’ 怎么用linux命令查看jvm进程有几个线程

在LINUX上可以使用kill -3 pid > thread.info来取得当前JVM线程的信息;
jstack 这个是用来查看jvm当前的thread mp的。可以看到当前Jvm里面的线程状况。
这个对于查找blocked线程比较有意义;

‘陆’ 怎么通过linux命令去分析jvm里面那个线程阻塞了

仍然需要生成jvm进程的thread mp data,便于与Linux top命令输出关联。步骤如下:
1)执行top命令,或使用-H选项(显示所有线程),找到相关的高CPU的PID
2)生成thread mp 快照(kill -3 PID)。
3)将top命令输出PID转换为HEX格式(16进制)
4)在thread mp data中搜索nid=<Hex PID>
5)分析受影响的thread和stack trace,精确定位代码。
top output sample

[plain] view plain
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
...........
22111 userWLS 9 0 86616 84M 26780 S 0.0 40.1 0:00 java

阅读全文

与linuxjvm监控命令相关的资料

热点内容
php多表批量导入 浏览:49
免费理论电影大全 浏览:874
法国两男一女电影 浏览:292
有一部电影叫什么湖泊 浏览:83
大尺度电影床戏视频 浏览:672
压缩机线圈烧了可以修吗 浏览:783
cctv5加密收费吗 浏览:211
理财app关闭该怎么办 浏览:452
服务器如何配置多个https域名 浏览:86
怎样制作文件夹的中文翻译 浏览:518
泰剧大尺度影片 浏览:730
为什么python适合做算法 浏览:810
新疆政务服务app中如何实名认证 浏览:224
重生成小孩 浏览:104
二战中的加密技术 浏览:515
美逛app如何建群 浏览:819
iphone用什么app3d扫描 浏览:289
冠生园葱油压缩饼干 浏览:503
Linux库文件安装 浏览:225
解压玩具黑猩猩 浏览:967