jvm 性能调优工具之 jps

jps命令详解
本文详细介绍了jps命令的使用方法及参数,包括如何查看Java进程的启动类、传入参数和Java虚拟机参数等信息。此外,还讲解了如何通过jps命令获取远程服务器上的jvm进程信息。

概述

jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。

如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。
如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看。

jps 用法

参数说明

-q:只输出进程 ID
-m:输出传入 main 方法的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数

[hostid]:远程服务器地址,jps 支持远程调用
[protocol:][[//]hostname][:port][/servername]

示例一:jps

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

jps 不带参数,默认显示 进程ID 和 启动类的名称。

示例二:jps -q

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

 

示例三:jps -m

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

 

示例四:jps -l

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

 

示例五:jps -v

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

 

获取远程服务器 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 服务器。

jps 原理

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

window系统显示如下:

 

从文件中可以看出 1864、4296、12600 跟上面的 jps 命令输出的进程 ID 一致。



作者:jijs
链接:https://www.jianshu.com/p/d39b2e208e72
 

### JVM性能的方法与最佳实践 #### 一、JVM性能的基础理论 JVM性能的核心目标在于化应用程序的运行效率以及资源利用率。通过JVM的各种参数,可以显著提升程序的表现。基础理论涵盖了垃圾回收机制(GC)、堆内存分配策略等内容[^1]。 #### 二、JVM性能的关键参数 为了实现高效的性能,需要熟悉并合理设置一系列重要的JVM参数。这些参数主要包括但不限于以下几个方面: - **堆内存配置** 堆内存分为年轻代(Young Generation)和老年代(Tenured/Old Generation),其比例可以通过`-XX:NewRatio=<value>`来设定,默认情况下新旧代的比例为2:8。此外,还可以指定初始堆大小(`-Xms`)和最大堆大小(`-Xmx`)。默认的最大堆内存约为物理内存的四分之一,在某些环境中可能接近450MB,而初始化大小通常较小,约30MB左右[^2]。 - **垃圾回收器的选择** 不同的应用场景适合不同的垃圾回收算法。常见的有Serial GC(-XX:+UseSerialGC), Parallel GC (-XX:+UseParallelGC), CMS (Concurrent Mark Sweep, -XX:+UseConcMarkSweepGC) 和 G1 Garbage Collector (-XX:+UseG1GC)[^1]。每种GC都有各自的适用范围和特点,例如CMS适用于低延迟需求较高的应用,而G1则更适合大容量堆环境下的综合表现化。 #### 三、具体操作流程 实际执行过程中,可以从多个角度入手来进行详细的诊断与改进工作: 1. 使用工具定位问题源码位置及其影响因素。比如利用 `jps -l`, `top -p <PID>`, 转换线程ID至十六进制形式并通过`printf "%x\n"`完成转换后再借助`jstack`命令获取具体的栈轨迹信息以便进一步排查异常行为所在之处[^3]; 2. 对于发现存在瓶颈或者耗时较长的操作部分,则需深入研究相关逻辑是否存在可化空间; 3. 同时也要关注外部依赖库版本兼容性情况以及其他潜在干扰项是否会对整体效能造成负面影响; 4. 配合使用专业的APM(Application Performance Management)平台持续跟踪线上实例状态变化趋势图谱从而及时作出相应整措施直至达到预期效果为止。 以下是用于打印当前虚拟机所有选项的一个简单脚本示例: ```bash #!/bin/bash if [ $# -ne 1 ]; then echo "Usage: $0 <pid>" exit 1 fi jinfo $1 | grep 'MaxHeapSize' ``` 此脚本接受一个进程号作为输入参数,并显示该进程中关于最大堆尺寸的信息。 #### 四、案例分享——解决堆溢出(OOM) 当遇到OutOfMemoryError错误提示时,意味着已经超出了所允许使用的内存限额界限。此时应当按照如下步骤处理: - 收集必要的数据资料,包括但不限于完整的gc日志文件、heap dump快照等辅助材料; - 应用专门设计用来解析上述提到的数据类型的软件产品如Eclipse MAT(Memory Analyzer Tool) 或 Visual VM 来识别主要占用者群体特征模式; - 结合业务背景知识共同探讨可行解决方案方向,最终决定增加可用硬件资源配置还是重构现有架构体系结构以减少不必要的对象创建活动频率等方式缓解压力状况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值