zoukankan      html  css  js  c++  java
  • jvm 性能调优工具之 jps 命令详解

    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名称等信息。
    jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。
    如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。
    如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看。

    使用方法:

    在当前命令行下输入jps(jps存放在JAVA_HOME/bin/jps,使用时为了方便需将JAVA_HOME/bin/加入到Path) 。

    参数说明:

    无参数:显示进程的ID和类的名称
    -q:仅显示进程ID
    -m:输出传入 main 方法的参数
    -l:输出java进程全路径,比如应用程序主类完整package名称或jar完整名称
    -v:输出jvm参数,比如堆大小,此命令方便我们查看JVM大小,不用去找配置文件
    -V:输出通过flag文件(.hotsportrc或-XX:Flags=<filename>)传递到JVM中的参数

    用法示例:

    [root@hadoop ~]# cd /usr/local/zookeeper/bin/ #首先启动zookeeper,对比一下jps和ps -ef|grep java的区别
    [root@hadoop bin]# zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    [root@hadoop bin]# jps #jps 不带参数,默认显示进程ID和启动类的名称。
    4060 QuorumPeerMain
    4077 Jps
    [root@hadoop bin]# ps -ef|grep java
    root       4060      1  1 16:50 pts/0    00:00:00 /usr/java/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/zookeeper/bin/../build/classes:/usr/local/zookeeper/bin/../build/lib/*.jar:/usr/local/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper/bin/../zookeeper-3.4.9.jar:/usr/local/zookeeper/bin/../src/java/lib/*.jar:/usr/local/zookeeper/bin/../conf:.:/usr/java/lib/dt.jar:/usr/java/lib/tools.jar:/usr/java/jre/lib -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /usr/local/zookeeper/bin/../conf/zoo.cfg
    root       4088   2748  0 16:50 pts/0    00:00:00 grep --color=auto java
    
    [root@hadoop bin]# jps -q #参数-q只输出进程ID,而不显示出类的名称
    4091
    4060
    
    [root@hadoop bin]# jps -m #参数-m可以输出传递给Java进程(main方法)的参数
    4101 Jps -m
    4060 QuorumPeerMain /usr/local/zookeeper/bin/../conf/zoo.cfg
    
    [root@hadoop bin]# jps -l #参数-l可以输出主函数的完整路径(类的全路径)
    4060 org.apache.zookeeper.server.quorum.QuorumPeerMain
    4111 sun.tools.jps.Jps
    
    [root@hadoop bin]# jps -v #参数-v可以显示传递给Java虚拟机的参数
    4121 Jps -Denv.class.path=.:/usr/java/lib/dt.jar:/usr/java/lib/tools.jar:/usr/java/jre/lib -Dapplication.home=/usr/java -Xms8m
    4060 QuorumPeerMain -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
    
    [root@hadoop bin]# jps -V
    4131 Jps
    4060 QuorumPeerMain
    

    获取远程服务器 jps 信息

    jps [ip]:可以列出远程机器上的java进程信息,不过需要安全授权。

    步骤:

    1.在远程机器%JAVA_HOME%/bin/目录下创建jstatd.all.policy文件,内容如下:

    grant codebase "file:${java.home}/../lib/tools.jar" {
        permission java.security.AllPermission;
    };
    

    2.在远程机器%JAVA_HOME%/bin/目录下,执行如下命令:

    jstatd -J-Djava.security.policy=jstatd.all.policy &

    3.在本地机器上使用jps访问远程机器上的JVM。

    现在就让我们实际试一下吧~

    1.首先在本地执行命令,发现报错(报错信息:RMI服务未注册)
    C:UsersAdministrator>jps 192.168.146.128
    RMI Registry not available at 192.168.146.128:1099
    Connection refused to host: 192.168.146.128; nested exception is:
            java.net.ConnectException: Connection refused: connect
    
    
    2.在远程服务器创建策略文件并执行命令
    [root@hadoop ~]# java -version #查看java版本
    java version "1.8.0_11"
    Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
    [root@hadoop ~]# echo $JAVA_HOME #找到JAVA_HOME目录
    /usr/java
    [root@hadoop ~]# cd /usr/java/bin/ #进入%JAVA_HOME%/bin/目录
    [root@hadoop bin]# vi jstatd.all.policy #创建文件
    grant codebase "file:${java.home}/../lib/tools.jar" {
        permission java.security.AllPermission;
    };
    [root@hadoop bin]# jstatd -J-Djava.security.policy=jstatd.all.policy & #执行命令
    [1] 3475
    
    
    3.测试是否成功
    [root@hadoop ~]# cd /usr/local/zookeeper/bin/ #启动一个java进程,这里我启动zk
    [root@hadoop bin]# zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    [root@hadoop bin]# jps #在远程机器上查看jps
    3346 QuorumPeerMain
    3475 Jstatd
    4231 Jps
            
    C:UsersAdministrator>jps 192.168.146.128 #在本地机器上查看jps
    3346 QuorumPeerMain
    3475 Jstatd
    实操

    遇到问题:Java RMI:rmi Connection refused to host: 127.0.0.1异常解决

    解决方法:https://blog.csdn.net/chenchaofuck1/article/details/51558995

    参考:

    jps官方文档:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html
    JAVA JPS 命令详解:https://www.cnblogs.com/tulianghui/p/5914535.html
    jvm 性能调优工具之 jps:https://www.jianshu.com/p/d39b2e208e72

  • 相关阅读:
    HDU 多校对抗赛第二场 1010 Swaps and Inversions
    Android Tab -- 使用ViewPager、PagerTitleStrip/PagerTabStrip来实现
    Android Tab -- 使用ViewPager、Fragment、FragmentPagerAdapter来实现
    Android Tab -- 使用Fragment、FragmentManager来实现
    Android Tab -- 使用ViewPager、PagerAdapter来实现
    Android Tab -- 使用TabWidget、TabHost、TabActivity来实现
    Android Programming: Pushing the Limits -- Chapter 6: Services and Background Tasks
    Android Programming: Pushing the Limits -- Chapter 5: Android User Interface Operations
    Android Programming: Pushing the Limits -- Chapter 4: Android User Experience and Interface Design
    Android Programming: Pushing the Limits -- Chapter 3: Components, Manifests, and Resources
  • 原文地址:https://www.cnblogs.com/zhengna/p/10670390.html
Copyright © 2011-2022 走看看