技术标签: jvm JVM监控命令 java # JVM虚拟机 jps
目录
性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。
Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。
简单命令行工具
在我们刚接触java学习的时候,大家肯定最先了解的两个命令就是javac,java,那么除此之外,还有没有其他的命令可以供我们使用呢?
我们进入到安装jdk的bin目录,发现还有一系列辅助工具。这些辅助工具用来获取目标 JVM 不同方面、不同层次的信息,帮助开发人员很好地解决Java应用程序的一些疑难杂症。
如下图,在Java Home路径下的bin文件夹里面【如笔者:C:\Program Files\Java\jdk1.8.0_291\bin】有很多对应的命令:
官方源码地址:jdk/jdk11: 1ddf9a99e4ad /src/jdk.jcmd/share/classes/sun/tools/
jps(Java Process Status):显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。
说明:对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的,是唯一的。
基本使用语法为:jps [options] [hostid]
public class JVMCommandTest {
public static void main(String[] args) throws ClassNotFoundException {
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
}
}
我们还可以通过追加参数,来打印额外的信息。options参数:
C:\Users\WSH>jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
C:\Users\WSH>jps -q
11728
2400
8656
10056
3468
C:\Users\WSH>jps -l
11728 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
2400
10056 org.jetbrains.idea.maven.server.RemoteMavenServer
2348 sun.tools.jps.Jps
3468 org.jetbrains.jps.cmdline.Launcher
C:\Users\WSH>jps -m
11728 KotlinCompileDaemon --daemon-runFilesPath C:\Users\WSH\AppData\Local\kotlin\daemon --daemon-autoshutdownIdleSeconds=7200 --daemon-compilerClasspath D:\development\idea201803\IntelliJ IDEA 2018.3.6\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Program Files\Java\jdk1.8.0_291\lib\tools.jar
2400
10056 RemoteMavenServer
13368 Jps -m
3468 Launcher D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/lz4-1.3.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/asm-all-7.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/jps-builders-6.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/httpclient-4.5.6.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/annotations.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/netty-resolver-4.1.30.Final.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/guava-25.1-jre.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/log4j.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/trove4j.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/aether-transport-http-1.1.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/oro-2.0.8.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/forms-1.1-preview.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/netty-codec-4.1.30.Final.jar;D:/development/idea201803/IntelliJ IDEA 2018
C:\Users\WSH>jps -v
11728 KotlinCompileDaemon -Djava.awt.headless=true -Djava.rmi.server.hostname=127.0.0.1 -Xmx700m -Dkotlin.incremental.compilation=true
2400 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -javaagent:D:\development\idea201803\IntelliJ IDEA 2018.3.6\bin\JetbrainsIdesCrack-4.2-release-sha1-3323d5d0b82e716609808090d3dc7cb3198b8c4b.jar -Djb.vmOptionsFile=D:\development\idea201803\IntelliJ IDEA 2018.3.6\bin\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2018.3 -XX:ErrorFile=C:\Users\WSH\java_error_in_idea_%p.log -XX:HeapDumpPath=C:\Users\WSH\java_error_in_idea.hprof
10056 RemoteMavenServer -Djava.awt.headless=true -Didea.version==2018.3.6 -Xmx768m -Didea.maven.embedder.version=3.5.4 -Dfile.encoding=GBK
11628 Jps -Denv.class.path=.;C:\Program Files\Java\jdk1.8.0_291\lib;C:\Program Files\Java\jdk1.8.0_291\lib\tools.jar -Dapplication.home=C:\Program Files\Java\jdk1.8.0_291 -Xms8m
3468 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=D:/workspace/rocketmq-demo -Dpreload.config.path=C:/Users/WSH/.IntelliJIdea2018.3/config/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=4066953370042905902 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.3 -Didea.home.path=D:\development\idea201803\IntelliJ IDEA 2018.3.6 -Didea.config.path=C:\Users\WSH\.IntelliJIdea2018.3\config -Didea.plugins.path=C:\Users\WSH\.IntelliJIdea2018.3\config\plugins -Djps.log.dir=C:/Users/WSH/.IntelliJIdea2018.3/system/log/build-log -Djps.fallback.jdk.home=D:/development/idea201803/IntelliJ IDEA 2018.3.6/jre64 -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/WSH/.IntelliJIdea2018.3/system/compile-server/rocketmq-demo_fa1197b4/_temp_ -Djps.backward.ref.index.builder=true -Dkotlin.increme
说明:以上参数可以综合使用。
C:\Users\WSH>jps -lvm
11728 org.jetbrains.kotlin.daemon.KotlinCompileDaemon --daemon-runFilesPath C:\Users\WSH\AppData\Local\kotlin\daemon --daemon-autoshutdownIdleSeconds=7200 --daemon-compilerClasspath D:\development\idea201803\IntelliJ IDEA 2018.3.6\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Program Files\Java\jdk1.8.0_291\lib\tools.jar -Djava.awt.headless=true -Djava.rmi.server.hostname=127.0.0.1 -Xmx700m -Dkotlin.incremental.compilation=true
2400 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -javaagent:D:\development\idea201803\IntelliJ IDEA 2018.3.6\bin\JetbrainsIdesCrack-4.2-release-sha1-3323d5d0b82e716609808090d3dc7cb3198b8c4b.jar -Djb.vmOptionsFile=D:\development\idea201803\IntelliJ IDEA 2018.3.6\bin\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2018.3 -XX:ErrorFile=C:\Users\WSH\java_error_in_idea_%p.log -XX:HeapDumpPath=C:\Users\WSH\java_error_in_idea.hprof
4032 sun.tools.jps.Jps -lvm -Denv.class.path=.;C:\Program Files\Java\jdk1.8.0_291\lib;C:\Program Files\Java\jdk1.8.0_291\lib\tools.jar -Dapplication.home=C:\Program Files\Java\jdk1.8.0_291 -Xms8m
10056 org.jetbrains.idea.maven.server.RemoteMavenServer -Djava.awt.headless=true -Didea.version==2018.3.6 -Xmx768m -Didea.maven.embedder.version=3.5.4 -Dfile.encoding=GBK
3468 org.jetbrains.jps.cmdline.Launcher D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/lz4-1.3.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/asm-all-7.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/jps-builders-6.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/httpclient-4.5.6.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/annotations.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/netty-resolver-4.1.30.Final.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/guava-25.1-jre.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/log4j.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/trove4j.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/aether-transport-http-1.1.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/oro-2.0.8.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/forms-1.1-preview.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/netty-codec-4.1.30.Final.jar;D:/development/idea201803/IntelliJ IDEA 2018 -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=D:/workspace/rocketmq-demo -Dpreload.config.path=C:/Users/WSH/.IntelliJIdea2018.3/config/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=4066953370042905902 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.3 -Didea.home.path=D:\development\idea201803\IntelliJ IDEA 2018.3.6 -Didea.config.path=C:\Users\WSH\.IntelliJIdea2018.3\config -Didea.plugins.path=C:\Users\WSH\.IntelliJIdea2018.3\config\plugins -Djps.log.dir=C:/Users/WSH/.IntelliJIdea2018.3/system/log/build-log -Djps.fallback.jdk.home=D:/development/idea201803/IntelliJ IDEA 2018.3.6/jre64 -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/WSH/.IntelliJIdea2018.3/system/compile-server/rocketmq-demo_fa1197b4/_temp_ -Djps.backward.ref.index.builder=true -Dkotlin.increme
###########当然也可以分开写,效果是一样的#######################
C:\Users\WSH>jps -l -v -m
11728 org.jetbrains.kotlin.daemon.KotlinCompileDaemon --daemon-runFilesPath C:\Users\WSH\AppData\Local\kotlin\daemon --daemon-autoshutdownIdleSeconds=7200 --daemon-compilerClasspath D:\development\idea201803\IntelliJ IDEA 2018.3.6\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Program Files\Java\jdk1.8.0_291\lib\tools.jar -Djava.awt.headless=true -Djava.rmi.server.hostname=127.0.0.1 -Xmx700m -Dkotlin.incremental.compilation=true
2400 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -javaagent:D:\development\idea201803\IntelliJ IDEA 2018.3.6\bin\JetbrainsIdesCrack-4.2-release-sha1-3323d5d0b82e716609808090d3dc7cb3198b8c4b.jar -Djb.vmOptionsFile=D:\development\idea201803\IntelliJ IDEA 2018.3.6\bin\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2018.3 -XX:ErrorFile=C:\Users\WSH\java_error_in_idea_%p.log -XX:HeapDumpPath=C:\Users\WSH\java_error_in_idea.hprof
3920 sun.tools.jps.Jps -l -v -m -Denv.class.path=.;C:\Program Files\Java\jdk1.8.0_291\lib;C:\Program Files\Java\jdk1.8.0_291\lib\tools.jar -Dapplication.home=C:\Program Files\Java\jdk1.8.0_291 -Xms8m
10056 org.jetbrains.idea.maven.server.RemoteMavenServer -Djava.awt.headless=true -Didea.version==2018.3.6 -Xmx768m -Didea.maven.embedder.version=3.5.4 -Dfile.encoding=GBK
3468 org.jetbrains.jps.cmdline.Launcher D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/lz4-1.3.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/asm-all-7.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/jps-builders-6.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/httpclient-4.5.6.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/annotations.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/netty-resolver-4.1.30.Final.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/guava-25.1-jre.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/log4j.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/trove4j.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/aether-transport-http-1.1.0.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/oro-2.0.8.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/forms-1.1-preview.jar;D:/development/idea201803/IntelliJ IDEA 2018.3.6/lib/netty-codec-4.1.30.Final.jar;D:/development/idea201803/IntelliJ IDEA 2018 -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=D:/workspace/rocketmq-demo -Dpreload.config.path=C:/Users/WSH/.IntelliJIdea2018.3/config/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=4066953370042905902 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.3 -Didea.home.path=D:\development\idea201803\IntelliJ IDEA 2018.3.6 -Didea.config.path=C:\Users\WSH\.IntelliJIdea2018.3\config -Didea.plugins.path=C:\Users\WSH\.IntelliJIdea2018.3\config\plugins -Djps.log.dir=C:/Users/WSH/.IntelliJIdea2018.3/system/log/build-log -Djps.fallback.jdk.home=D:/development/idea201803/IntelliJ IDEA 2018.3.6/jre64 -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/WSH/.IntelliJIdea2018.3/system/compile-server/rocketmq-demo_fa1197b4/_temp_ -Djps.backward.ref.index.builder=true -Dkotlin.increme
注意:如果某 Java 进程关闭了默认开启的UsePerfData参数(即使用参数-XX:-UsePerfData),那么jps命令(以及下面介绍的jstat)将无法探知该Java 进程。
hostid参数
RMI注册表中注册的主机名。如果想要远程监控主机上的 java 程序,需要安装 jstatd。
对于具有更严格的安全实践的网络场所而言,可能使用一个自定义的策略文件来显示对特定的可信主机或网络的访问,尽管这种技术容易受到IP地址欺诈攻击。
如果安全问题无法使用一个定制的策略文件来处理,那么最安全的操作是不运行jstatd服务器,而是在本地使用jstat和jps工具。
题目:将head单链表以m为组反转链表(不足m则不反转):例子:假设m=3. 链表 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 ->8output: 3 -> 2 -> 1 ->6 ->5 ->4 -> 7 ->8思路:可以使用栈的结构解决这个问题,如果栈中值为K则弹出栈使用栈的结构,时间复杂度O(n),控件复杂度为O(K)1.代码如下:1.1Node.javapackage com.
如何将Android DEX(VM字节码)文件反编译成相应的Java源代码?
目前我使用到的python中执行cmd的方式有三种:1. 使用os.system("cmd")这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。[python] view plaincopyprint?os.system("ls")2. 使用Popen模块产生新的proc...
服务器安装Setup-Subversion-1.7.7 安装路径:D:\Subversion在D:\根目录新建SVN目录做为svn的版本库目录。接着,在D:\SVN\目录下新建一个项目bobo目录。然后,在该目录上右键,选择:TortoiseSVN -> 在此创建版本库,点击“确定”(注意:不要创建目录结构-理由:由于本人对SVN不了解,经过测试,如果创建了目录结构,那么同步到客户端的项目
1、用json传输图片一些注意事项 json是一种轻量级的数据结构,我们知道json是以字符串形式存储数据的。如果我们想要通过json传送文件或者图片的话,必然涉及到要将图片或文件读取为字节并转为json放入字符串中,但是这其中存在一个问题java的字符都是由Unicode编码的,可以转换为2个字节的数据,这两个字节的值可能不在ASCII码中。而大多计算机都是用ASCII存储数据,比如在网络传...
那些奇葩的代码注释
Java代码 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是J
要专业系统地学习EF前往《你必须掌握的Entity Framework 6.x与Core 2.0》这本书的作者(汪鹏,Jeffcky)的博客:https://www.cnblogs.com/CreateMyself/EF里面当然也可以直接使用SQL语句了,比如有些复杂的查询用LINQ写不了的,还有存储过程那些东西。EF为查询操作提供了两个方法:ctx.Database.SqlQuery()、ctx...
四象限波形显示控件视图展示创建步骤给自定义控件添加事件添加一个图片控件(pictureBox1)代码部分视图展示十字坐标轴方式一象限坐标轴方式二象限坐标轴方式创建步骤##创建自定义控件(名字可随意)给自定义控件添加事件以上个事件一个就Load(初始化)、背景颜色发生改变(不多说)、控件大小发生改变(支持大小拖动)添加一个图片控件(pictureBox1)直接从工具箱中拖到自定义控件的绘制板就OK啦!记得将pictureBox1.Dock=Fill;代码部分下面有点儿
1.用模型定义来操作数据库a.模型定义名和数据表名一致&lt;?php// 命名空间namespace app\index\model;// 导入系统的数据模型use think\Model;/*** 一般数据模型都是和表名一致*/class User extends Model{ }a-1.表名和数据模型定义名不一致需要额外定义&lt;?php//...
laya.d3.js:22677 Uncaught RangeError: Invalid typed array length: 44169 at new Uint16Array (<anonymous>) at IndexBuffer3D.__proto.setData (laya.d3.js:22677) at SubMeshDynamicBatch.__...
3.1 概述说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收?经过半个世纪的发展,内存的动态分配与内存回收技术已经相当...