JPS 名称: jps - Java Virtual Machine Process Status Tool

命令用法: jps [options] [hostid]

options:命令选项,用来对输出格式进行控制

hostid:指定特定主机,可以是ip地址和域名, 也可以指定具体协议,端口。

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

功能描述: jps是用于查看有权访问的hotspot虚拟机的进程. 当未指定hostid时,默认查看本机jvm进程,否者查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。 jps可以列出jvm进程lvmid,主类类名,main函数参数, jvm参数,jar名称等信息。

命令选项及功能:

没添加option的时候,默认列出VM标示符号和简单的class或jar名称.如下:

-p  :仅仅显示VM 标示,不显示jar,class, main参数等信息.

-m:输出主函数传入的参数. 下的hello 就是在执行程序时从命令行输入的参数

-l: 输出应用程序主类完整package名称或jar完整名称.

-v: 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数

-V: 输出通过.hotsportrc或-XX:Flags=<filename>指定的jvm参数

-Joption:传递参数到javac 调用的java lancher.

概述

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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. 基于.net mvc 的供应链管理系统(YB-SCM)开发随笔
  2. Mac下搭建android开发环境
  3. sky简介
  4. 【Android】将Xamarin For VS升级为4.1.0.530版
  5. .Net下实现可扩展的编程方法简述
  6. 重拾C,一天一点点_6
  7. hibernate - 何时关闭数据库
  8. 探讨VMP 2.12.3 导入表修复
  9. C++中的类和对象(二)
  10. SQL函数经常用到的mark一下
  11. Educational Codeforces Round 15_C. Cellular Network
  12. CSS伪类详情
  13. java.lang.NumberFormatException错误及解决方法
  14. Anaconda For Linux (附C#交互式编程的引入)
  15. vscode c++ 编译生成后,调试时无法命中断点
  16. Unity 原厂免费资源学习
  17. webpack 自动发现 entry 的配置和引用方式
  18. Fb,tw等emoji相关
  19. Android之开源项目汇总
  20. python3中文件操作及编码

热门文章

  1. Punycode
  2. vmware虚拟机使用静态IP上网的方法
  3. Codeforces 1009G Allowed Letters 最大流转最小割 sosdp
  4. Linux下执行Java程序报错
  5. 解除vnc viewer键盘快捷键的禁用
  6. UOJ#42. 【清华集训2014】Sum 类欧几里德算法
  7. 用es6方式的写的订阅发布的模式
  8. drf视图组件、认证组件
  9. Scrapy基础(十四)————知乎模拟登陆
  10. STL 中 使用迭代器删除元素的问题