JDK诊断工具——jps

本文详细解读了Java进程管理工具jps的各种选项,包括-jq、-m、-l、-v,展示了如何通过IDEA和命令行操作获取JVM信息,以及JVM参数对性能的影响。阅读本文,提升对Java虚拟机理解及进程监控能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jps,会为目标系统上的当前用户列出每个已检测的Java虚拟机。

jps主要选择有四个

选项简述
-q只输出JVM ID(进程id),忽略主类名
-m输出虚拟机启动时传递给主类main()方法的参数
-l输出主类的全名,如果是Jar包输出Jar路径
-v输出虚拟机进程启动时的JVM参数

demo代码如下

/**
 * 学习jps
 * @author 编程还未
 * @since 2022/4/18 20:56
 **/
public class TestJps {
    public static void main(String[] args) {
        System.out.println("hello world");
        try {
            Thread.currentThread().setName("Test JPS");
            //等待一分钟,方便使用jps命令
            TimeUnit.MINUTES.sleep(1);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

在IDEA启动上述代码,或者用CMDPowerShell等命令行启动。然后新开一个命令行窗口,输入下面的命令

  1. jps

    (base) PS G:\Project\highway-resources> jps 
    22140 TestJps
    
  2. jps -q

    (base) PS G:\Project\highway-resources> jps -q
    19608
    20744
    23592
    26072
    3848
    25500
    
  3. jps -m

    我们在IDEA运行设置里面加一些参数,

Java启动传参

图片红框位置,加上hi jps。然后启动。

或者命令行启动的时候加入参数:java TestJps hi jps

(base) PS G:\Project\highway-resources> jps -m
19608 RemoteMavenServer
23592
26072
17068 Jps -m
19660 TestJps hi jps
  1. jps -l

    (base) PS G:\Project\highway-resources> jps -l
    19608 org.jetbrains.idea.maven.server.RemoteMavenServer
    20744 com.program_highway.jps.TestJps
    3848 org.jetbrains.jps.cmdline.Launcher
    20556 jdk.jcmd/sun.tools.jps.Jps
    
  2. jps -v

    (base) PS G:\Project\highway-resources> jps -v
    26028 TestJps -javaagent:G:\JetBrains\apps\IDEA-U\ch-1\221.5080.210\lib\idea_rt.jar=61436:G:\JetBrains\apps\IDEA-U\ch-1\221.5080.210\bin -Dfile.encoding=UTF-8
    

    这个内容比较多,如果是用IDEA启动的话,会打印IDEA自身的JVM参数。

    贴一部分小部分,简单讲解一下

    23592  -Xmx256m -Xms8m -Xss256k
    
    1. 23492:进程ID
    2. -Xmx256m:JVM堆最大为256m
    3. -Xms8m:JVM堆初始大小为8m
    4. -Xss256k:JVM栈的大小256k

    关于JVM的内容,可以看我这篇博文了解。面试必备——图文剖析JVM的运行时数据区_编程还未的博客-优快云博客

### 使用 `jps`、`jstack`、`jmap` 和 `jprofile` 进行 Java 性能监控与故障排查 #### 查看当前的 Java 进程 (`jps`) 为了更方便地定位到想要查看的 Java 进程,可以使用 `jps` 命令。此命令不仅能够显示本地主机上的所有 Java 应用程序及其对应的进程 ID (PID),还支持额外选项来获取更多关于这些应用程序的信息[^2]。 ```bash $ jps -lvm ``` 该指令会列出所有的 Java 进程以及它们启动时所使用的类路径和传递给 JVM 的参数。 #### 获取线程转储 (`jstack`) 当遇到响应迟缓或挂起的应用程序实例时,`jstack` 工具非常有用。通过附加至目标进程中,可以获得其内部状态快照——即所谓的“线程转储”,其中包括每个活动线程的位置(方法名)、锁持有情况以及其他诊断数据[^1]。 对于已经处于非正常工作状态下(例如死锁)的服务端应用来说,这有助于识别潜在的问题根源所在;而对于那些意外终止的情况,则可以从 core 文件中提取相似的数据用于事后分析[^4]。 ```bash $ jstack -F <pid> ``` 这里的 `-F` 参数表示强制模式,在某些情况下可能需要管理员权限才能成功执行上述操作。 #### 分析内存状况 (`jmap`) 利用 `jmap` 可以生成指定 Java 虚拟机实例的堆转储文件,这对于深入研究对象分配行为特别有价值。除了基本的对象统计外,还可以进一步借助其他工具加载并解析此类二进制格式的内容,以便于发现是否存在泄漏等问题[^3]。 创建一个完整的 HPROF 格式的 dump: ```bash $ jmap -dump:live,format=b,file=heap.bin <pid> ``` 注意:这里加上了 `live` 关键字意味着只保存仍然存活的对象集合,通常推荐这样做因为这样可以减少不必要的噪音干扰实际问题查找过程中的视线。 至于提到的 `jprofile` 并不是标准 JDK 自带的一部分,可能是混淆了名称或者是第三方提供的性能剖析软件。如果是后者的话,请参照相应产品的官方文档来进行具体配置与运用指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程还未

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值