美文网首页
linux查找java进程pid

linux查找java进程pid

作者: nextliving | 来源:发表于2018-04-22 15:13 被阅读1062次

    使用jstat等jdk自带命令时需要提供java进程的pid,特意将查找方法总结了一下.本文的所有命令行操作基于阿里云centos7.4.

    查找方案

    主要有2种方案,jdk自带的jps命令和linux系统提供的ps命令

    jps

    jps位置

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。注意:jps仅查找当前用户的Java进程,而不是当前系统中的所有进程.

    jps使用

    直接使用$ jps输出

    
    26993 Jps
    
    8566 Application
    
    958 Bootstrap
    
    

    输出了pid和main方法所在的class名称.

    使用$ jps -m输出

    
    8566 Application
    
    27004 Jps -m
    
    958 Bootstrap start
    
    

    在pid和应用名称的基础上输出了传递给main方法的参数.对于Jps,传递的参数就是-m,和命令行中完全一致.

    使用$ jps -l输出

    
    8566 com.aliyun.tianji.cloudmonitor.Application
    
    27015 sun.tools.jps.Jps
    
    958 org.apache.catalina.startup.Bootstrap
    
    

    可见输出了pid,以及main class的完整package名或者应用程序的jar文件完整路径名

    使用$ jps -v输出

    
    27026 Jps -Dapplication.home=/usr/java/jdk1.8.0_162 -Xms8m
    
    8566 Application -Djava.compiler=none -XX:-UseGCOverheadLimit -XX:NewRatio=1 -XX:SurvivorRatio=8 -XX:+UseSerialGC -Djava.io.tmpdir=../../tmp -Xms16m -Xmx32m -Djava.library.path=../lib:../../lib -Dwrapper.key=SUCZjv9-hMAY1z28 -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.disable_console_input=TRUE -Dwrapper.pid=8564 -Dwrapper.version=3.5.27 -Dwrapper.native_library=wrapper -Dwrapper.arch=x86 -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1
    
    958 Bootstrap -Djava.util.logging.config.file=/usr/local/apache-tomcat-8.5.29/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -Dcatalina.base=/usr/local/apache-tomcat-8.5.29 -Dcatalina.home=/usr/local/apache-tomcat-8.5.29 -Djava.io.tmpdir=/usr/local/apache-tomcat-8.5.29/temp
    
    

    可以输出了pid,main方法所在的class名,以及传递给jvm的参数.

    jps缺点

    只能查看当前用户的java进程.如果需要查看其它用户进程,需要ps命令.

    ps

    ps命令作用

    ps命令用于检查linux操作系统中的进程状态,参考ps命令

    ps使用

    具体到找到java进程,一般使用命令$ ps -ef | grep java:

    
    root  958  1 0 Apr06 ? 00:07:36 /usr/java/jdk1.8.0_162/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-8.5.29/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /usr/local/apache-tomcat-8.5.29/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.29/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/apache-tomcat-8.5.29 -Dcatalina.home=/usr/local/apache-tomcat-8.5.29 -Djava.io.tmpdir=/usr/local/apache-tomcat-8.5.29/temp org.apache.catalina.startup.Bootstrap start
    
    root 8564  1 0 Apr11 ? 00:01:04 /usr/local/cloudmonitor/wrapper/bin/./wrapper /usr/local/cloudmonitor/wrapper/bin/../conf/wrapper.conf wrapper.syslog.ident=cloudmonitor wrapper.pidfile=/usr/local/cloudmonitor/wrapper/bin/./cloudmonitor.pid wrapper.daemonize=TRUE wrapper.name=cloudmonitor wrapper.displayname=cloudmonitor wrapper.statusfile=/usr/local/cloudmonitor/wrapper/bin/./cloudmonitor.status wrapper.java.statusfile=/usr/local/cloudmonitor/wrapper/bin/./cloudmonitor.java.status wrapper.lockfile=/var/lock/subsys/cloudmonitor wrapper.script.version=3.5.27
    
    root 8566 8564 0 Apr11 ? 00:15:45 /usr/local/cloudmonitor/jre/bin/java -Djava.compiler=none -XX:-UseGCOverheadLimit -XX:NewRatio=1 -XX:SurvivorRatio=8 -XX:+UseSerialGC -Djava.io.tmpdir=../../tmp -Xms16m -Xmx32m -Djava.library.path=../lib:../../lib -classpath ../lib/wrappertest.jar:../lib/wrapper.jar:../../config:../../lib/agent-commons-1.2.22.jar:../../lib/agent-core-1.2.22.jar:../../lib/agent-model-1.2.22.jar:../../lib/aopalliance-1.0.jar:../../lib/commons-logging-1.2.jar:../../lib/commons-net-3.5.jar:../../lib/gson-2.4.jar:../../lib/jvm-plugin-1.2.22.jar:../../lib/log4j-1.2.16.jar:../../lib/metrics-core-3.0.2.jar:../../lib/sigar-1.6.5.132.jar:../../lib/slf4j-api-1.7.5.jar:../../lib/spring-aop-4.2.4.RELEASE.jar:../../lib/spring-beans-4.2.4.RELEASE.jar:../../lib/spring-context-4.2.4.RELEASE.jar:../../lib/spring-core-4.2.4.RELEASE.jar:../../lib/spring-expression-4.2.4.RELEASE.jar:../../lib/system-plugin-1.2.22.jar:../../lib/updater-1.2.22-jar-with-dependencies.jar -Dwrapper.key=SUCZjv9-hMAY1z28 -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.disable_console_input=TRUE -Dwrapper.pid=8564 -Dwrapper.version=3.5.27 -Dwrapper.native_library=wrapper -Dwrapper.arch=x86 -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 com.aliyun.tianji.cloudmonitor.Application
    
    root  27139 26975 0 20:33 pts/0 00:00:00 grep --color=auto java
    
    

    可以看到输出了958、8566这2个jps命令中包含的pid,以及jps命令中没有的8564.

    如果不想输出传递给jvm的参数,使用`$ ps -ef | grep "java" | grep -v grep | awk '{print $2}'

    `,输出

    
    958
    
    8564
    
    8566
    
    

    可以看到只输出了pid.这个命令等价于$ ps x | awk '/[j]ava/{print $1}'

    $ pgrep -f java

    参考

    相关文章

      网友评论

          本文标题:linux查找java进程pid

          本文链接:https://www.haomeiwen.com/subject/etkclftx.html