java命令-jps -l

oracle:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html

1、介绍

用来查看基于HotSpotJVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。

使用jps时,如果没有指定hostid,它只会显示本地环境中所有的Java进程;如果指定了hostid,它就会显示指定hostid上面的java进程,不过这需要远程服务上开启了jstatd服务,可以参看前面的jstatd章节来启动jstad服务。

2、命令格式

jps [ options ] [ hostid ]

3、常用参数说明

-q 忽略输出的类名、Jar名以及传递给main方法的参数,只输出pid

-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null

-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。

-v 输出传给JVM的参数。

-V 输出通过标记的文件传递给JVM的参数(.hotspotrc文件,或者是通过参数-XX:Flags=指定的文件)。

-J 用于传递jvm选项到由javac调用的java加载器中,例如,“-J-Xms48m”将把启动内存设置为48M,使用-J选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。

4、服务器标识

hostid指定了目标的服务器,它的语法如下:

[protocol:][[//]hostname][:port][/servername]

protocol - 如果protocolhostname都没有指定,那表示的是与当前环境相关的本地协议,如果指定了hostname却没有指定protocol,那么protocol的默认就是rmi

hostname - 服务器的IP或者名称,没有指定则表示本机。

port - 远程rmi的端口,如果没有指定则默认为1099

Servername - 注册到RMI注册中心中的jstatd的名称。

5、使用示例

5.1、列出本地的Java进程

不带任何参数

fenglibin@libin:~$ jps

11644 Main

1947

12843 Jps

-v参数

fenglibin@libin:~$ jps -v

11644 Main -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:43467 -Dfile.encoding=GBK

1947 -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx512m

12858 Jps -Denv.class.path=/home/fenglibin/java6/lib/dt.jar:/home/fenglibin/java6/lib/tools.jar::/usr/bin/libtool:/usr/bin/autoconf:/usr/local/BerkeleyDB.4.8/lib -Dapplication.home=/home/fenglibin/java6 -Xms8m

-l参数

fenglibin@libin:~$ jps -l

11644 com.alibaba.china.webww.core.Main

12870 sun.tools.jps.Jps

1947

5.2、列出远程的Java进程

jstatd章节,我们有通过:

rmiregistry 2020&jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName

启动了名为AlternateJstatdServerNamejstatd服务,那么我们此时就可以通过该服务列出其有权限访问的Java进程。

fenglibin@libin:~$ jps 10.1.1.234:2020/AlternateJstatdServerName

29556 Bootstrap

28671 WSPreLauncher

2602 RegistryImpl

18272 Test

2603 Jstatd

### jps命令显示Java进程及其虚拟机参数的用法 #### 使用 `-V` 显示传递给 Java 虚拟机的所有参数 通过 `jps -V` 命令,可以查看正在运行的 Java 进程所使用的 JVM 参数。这有助于了解这些进程是如何被配置并启动的[^1]。 ```bash jps -V ``` 该命令会列出所有可访问的 Java 进程,并附带其 LVMID 和完整的 JVM 启动参数列表。 --- #### 使用 `-J<flag>` 配置 jps 自身的 JVM 参数 如果需要调整 `jps` 工具本身的 JVM 设置,则可以通过 `-J<flag>` 来实现。例如: ```bash jps -J-Xms512m -J-Xmx1g ``` 上述命令设置了 `jps` 工具自身的最小堆内存为 512MB,最大堆内存为 1GB。需要注意的是,这种设置仅影响 `jps` 命令的行为,而不会改变目标 Java 应用程序的 JVM 参数[^2]。 --- #### 结合 `-l` 查看主类全限定名 为了更清楚地知道某个 Java 进程的具体应用名称(即主类的全限定名),可以使用 `-l` 参数。此选项对于区分不同应用程序特别有用,因为它不仅提供简单的类名,还展示包路径下的完整类名[^3]。 ```bash jps -l ``` 输出示例: ``` 12345 com.example.MyApplication 67890 org.apache.catalina.startup.Bootstrap ``` --- #### 组合多个标志位获取全面信息 当希望同时获得详细的 JVM 参数和主类信息时,可以组合多种标志一起使用。例如: ```bash jps -lv ``` 这条指令将返回每个 Java 进程的 PID、完全限定的主类名以及所有的 JVM 参数。这对于排查性能问题或者验证特定环境变量是否生效非常有帮助[^4]。 --- #### 实际案例分析 假设有一个场景:我们需要监控生产环境中某台服务器上的所有 Tomcat 实例,并检查它们各自的 JVM 配置是否存在差异。此时就可以利用如下命令完成任务: ```bash jps -lv | grep Bootstrap ``` 这里我们过滤出了所有基于 Apache Tomcat (`org.apache.catalina.startup.Bootstrap`) 的实例,并且能够直观对比各个实例之间的 JVM 参数设定是否有区别。 --- ### 注意事项 尽管 `jps` 是一个强大的工具,但它只能报告那些它有权访问的 Java 进程详情。因此,在某些情况下可能看不到预期的结果,比如跨用户的 Java 程序可能会因为权限不足而导致无法查询到相关信息[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值