JVM 性能调优工具 jps

简介: Jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。

jps 用法

$ jps -help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]

参数说明

  • -q:只输出进程 ID
  • -m:输出传入 main 方法的参数
  • -l:输出完全的包名,应用主类名,jar的完全路径名
  • -v:输出jvm参数
  • -V:输出通过flag文件传递到JVM中的参数
[hostid]:远程服务器地址,jps 支持远程调用
[protocol:][[//]hostname][:port][/servername]

示例一:jps

无参数:显示进程的ID 和 启动类的名称。

$ jps
22912 Launcher
22260
4628 Launcher
31112 Jps
34712 Launcher
27884 RemoteJdbcServer

示例二:jps -q

参数 -q 只输出进程ID,而不显示出类的名称。

$ jps -q
22912
37616
22260
4628
34712
27884

示例三:jps -m

参数 -m 可以输出传递给 Java 进程(main 方法)的参数。

$ jps -m
22912 Launcher D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/jps-builders.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/annotations.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/trove4j.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/resources_en.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/protobuf-java-3.0.0.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/idea_rt.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/commons-logging-1.2.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/slf4j-api-1.7.10.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/asm-all.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/lz4-java-1.3.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/javac2.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/aether-1.1.0-all.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/httpcore-4.4.5.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/guava-21.0.jar;D:/Program Files/JetBra
22260
4628 Launcher D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/jps-builders.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/annotations.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/trove4j.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/resources_en.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/protobuf-java-3.0.0.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/idea_rt.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/commons-logging-1.2.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/slf4j-api-1.7.10.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/asm-all.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/lz4-java-1.3.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/javac2.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/aether-1.1.0-all.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/httpcore-4.4.5.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/guava-21.0.jar;D:/Program Files/JetBra
34712 Launcher D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/jps-builders.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/annotations.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/trove4j.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/resources_en.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/protobuf-java-3.0.0.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/idea_rt.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/commons-logging-1.2.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/slf4j-api-1.7.10.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/asm-all.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/lz4-java-1.3.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/javac2.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/aether-1.1.0-all.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/httpcore-4.4.5.jar;D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/lib/guava-21.0.jar;D:/Program Files/JetBra
1484 Jps -m
27884 RemoteJdbcServer com.mysql.jdbc.Driver

示例四:jps -l

参数 -l 可以输出主函数的完整路径(类的全路径)。

$ jps -l
22912 org.jetbrains.jps.cmdline.Launcher
22260
30628 sun.tools.jps.Jps
4628 org.jetbrains.jps.cmdline.Launcher
34712 org.jetbrains.jps.cmdline.Launcher
27884 com.intellij.database.remote.RemoteJdbcServer

示例五:jps -v

参数 -v 可以显示传递给 Java 虚拟机的参数。

$ jps -v
22912 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=D:/WorkSpace/hqev/rbac -Dpreload.config.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=8246017585702392224 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.1 -Didea.home.path=D:\Program Files\JetBrains\IntelliJ IDEA 2018.1 -Didea.config.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config -Didea.plugins.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config/plugins -Djps.log.dir=D:/Program Files/JetBrains/IntelliJIdeaConfig/system/log/build-log -Djps.fallback.jdk.home=D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/jre64 -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=D:/Program Files/JetBrains/IntelliJIdeaConfig/system/compile-server/rbac_aca57a50/_temp_ -D
22260  -Xms2048m -Xmx2048m -Xmn264m -XX:MaxPermSize=350m -XX:PermSize=128m -XX:ReservedCodeCacheSize=240m -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -XX:MaxJavaStackTraceDepth=-1 -Xverify:none -XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log -XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof -XX:+DisableAttachMechanism -Djb.vmOptionsFile=C:\Users\Victor.Zxy\.IntelliJIdea2018.1\config\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2018.1 -XX:ErrorFile=C:\Users\Victor.Zxy\java_error_in_idea_%p.log -XX:HeapDumpPath=C:\Users\Victor.Zxy\java_error_in_idea.hprof
27412 Jps -Dapplication.home=D:\Program Files\Java\jdk1.8.0_161 -Xms8m
4628 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=D:/WorkSpace/hqev/faw-common-log -Dpreload.config.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=8246017585702392224 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.1 -Didea.home.path=D:\Program Files\JetBrains\IntelliJ IDEA 2018.1 -Didea.config.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config -Didea.plugins.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config/plugins -Djps.log.dir=D:/Program Files/JetBrains/IntelliJIdeaConfig/system/log/build-log -Djps.fallback.jdk.home=D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/jre64 -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=D:/Program Files/JetBrains/IntelliJIdeaConfig/system/compile-server/faw-common-lo
34712 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=D:/WorkSpace/hqev/tsp -Dpreload.config.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=8246017585702392224 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.1 -Didea.home.path=D:\Program Files\JetBrains\IntelliJ IDEA 2018.1 -Didea.config.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config -Didea.plugins.path=D:/Program Files/JetBrains/IntelliJIdeaConfig/config/plugins -Djps.log.dir=D:/Program Files/JetBrains/IntelliJIdeaConfig/system/log/build-log -Djps.fallback.jdk.home=D:/Program Files/JetBrains/IntelliJ IDEA 2018.1/jre64 -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=D:/Program Files/JetBrains/IntelliJIdeaConfig/system/compile-server/tsp_4876f785/_temp_ -Djp
27884 RemoteJdbcServer -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=127.0.0.1 -Duser.timezone=UTC -Dfile.encoding=UTF-8

获取远程服务器 jps 信息

jps 支持查看远程服务上的 jvm 进程信息。如果需要查看其他机器上的 jvm 进程,需要在待查看机器上启动 jstatd 服务。

开启 jstatd 服务

启动 jstatd 服务,需要有足够的权限。 需要使用 Java 的安全策略分配相应的权限。

创建 jstatd.all.policy 策略文件。

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

启动 jstatd 服务器

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.31.241
  • -J 参数是一个公共的参数,如 jps、 jstat 等命令都可以接收这个参数。 由于 jps、 jstat 命令本身也是 Java 应用程序, -J 参数可以为 jps 等命令本身设置 Java 虚拟机参数。
  • -Djava.security.policy:指定策略文件
  • -Djava.rmi.server.hostname:指定服务器的ip地址(可忽略)

默认情况下, jstatd 开启在 1099 端口上开启 RMI 服务器。
image

jps 原理

java程序在启动以后,会在java.io.tmpdir指定的目录下,就是临时文件夹里,生成一个类似于hsperfdata_User的文件夹,这个文件夹里(在Linux中为/tmp/hsperfdata_{userName}/),有几个文件,名字就是java进程的pid,因此列出当前运行的java进程,只是把这个目录里的文件名列一下而已。 至于系统的参数什么,就可以解析这几个文件获得。

window系统显示如下:
image
从文件中可以看出 1864、4296、12600 跟上面的 jps 命令输出的进程 ID 一致。

相关文章
|
2月前
|
算法 Java 关系型数据库
掌握这3个技巧,你也可以秒懂JAVA性能调优和jvm垃圾回收
JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。
24 0
|
3月前
|
缓存 Java 中间件
jvm性能调优实战 -55RPC调用引发的OOM故障
jvm性能调优实战 -55RPC调用引发的OOM故障
58 0
|
3月前
|
缓存 监控 Java
jvm性能调优实战 - 48无限循环调用和没有缓存的动态代理引起的OOM
jvm性能调优实战 - 48无限循环调用和没有缓存的动态代理引起的OOM
39 0
|
3月前
|
消息中间件 存储 Java
jvm性能调优实战 - 47超大数据量处理系统是如何OOM的
jvm性能调优实战 - 47超大数据量处理系统是如何OOM的
42 0
|
3月前
|
Java
jvm性能调优实战 - 46堆区OOM解析
jvm性能调优实战 - 46堆区OOM解析
40 0
|
8天前
|
缓存 监控 Java
深入理解Java虚拟机(JVM)性能调优
【4月更文挑战第18天】本文探讨了Java虚拟机(JVM)的性能调优,包括使用`jstat`、`jmap`等工具监控CPU、内存和GC活动,选择适合的垃圾回收器(如Serial、Parallel、CMS、G1),调整堆大小和新生代/老年代比例,以及代码优化和JIT编译策略。通过这些方法,开发者能有效提升应用性能并应对复杂性挑战。性能调优是持续过程,需伴随应用演进和环境变化进行监控与优化。
|
2月前
|
监控 算法 NoSQL
深入理解JVM - 实战JVM工具(上)
深入理解JVM - 实战JVM工具(上)
70 0
|
3月前
|
监控 Java 应用服务中间件
jvm性能调优实战 -58类加载器过多引发的OOM问题
jvm性能调优实战 -58类加载器过多引发的OOM问题
97 0
|
3月前
|
Java 应用服务中间件
jvm性能调优实战 - 45无限制的调用方法导致栈溢出OOM
jvm性能调优实战 - 45无限制的调用方法导致栈溢出OOM
44 0
|
3月前
|
安全 IDE Java
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
138 0