专栏首页java 成神之路jvm 性能调优工具之 jps

jvm 性能调优工具之 jps

概述

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 一致。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java 成神之路

    java404
  • RocketMQ 同步刷盘实现原理

    java404
  • RSA 非对称加密原理(小白也能看懂哦~)

    java404
  • JVM 与 Linux 的内存关系详解

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身...

    Java技术栈
  • 内核必须懂(一): 用系统调用打印Hello, world!

    sean_yang
  • JVM 与 Linux 的内存关系详解

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身...

    苏先生
  • 看完这篇文章你还敢说你懂JVM吗?

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身...

    用户1516716
  • Linux与JVM的内存关系分析(文末送书)

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身...

    黄泽杰
  • Linux与JVM的内存关系分析

    引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux...

    美团技术团队
  • 看完这篇文章你还敢说你懂JVM吗?

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身...

    lyb-geek

扫码关注云+社区

领取腾讯云代金券