linux查找java进程pid
使用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