有这么一个场景,在某个运行docker容器的主机上,查看到某个java进程占用的系统资源比较高,比如内存比较高,我们知道了这个进程是容器的进程,那么,我们怎么能够知道,这个进程是属于哪个容器的呢?
下面的命令,就会向你说明,如何在主机上,通过一个操作系统的进程,来获取该进程所在的容器名称······
首先,我们在主机上查看某个进程对应的PID(或者top命令也可以)
[root@nccztsjb-node-09 ~]# ps -ef |grep java | grep "/usr/local/java/bin/jav"
root 5220 5212 3 16:28 ? 00:00:04 /usr/local/java/bin/java -jar tools.jar ymscopy
root 6741 23869 0 16:30 pts/1 00:00:00 grep --color=auto /usr/local/java/bin/jav
root 9552 8476 3 Jun23 ? 03:38:10 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms512m -Xmx1792m -Xss8m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=768m -Duser.timezone=GMT+08 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -Djava.awt.headless=true -XX:+DisableExplicitGC -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Ddefault.client.encoding=UTF-8 -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF8 -Duser.language=Zh -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 16063 16020 4 Jun23 ? 04:21:29 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms512m -Xmx1792m -Xss8m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=768m -Duser.timezone=GMT+08 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -Djava.awt.headless=true -XX:+DisableExplicitGC -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Ddefault.client.encoding=UTF-8 -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF8 -Duser.language=Zh -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
左边的第2列,就是获取到进程ID,我们以16063为例子 通过下面的命令,来获取该进程所在的容器的名称
pid=16063 # 这里替换为要查询的进程的PID
for i in $(docker container ls --format "{{.ID}}");
do
id_count=$(docker top $i | grep ${pid} | wc -l)
if [[ ${id_count} -gt 0 ]]
then
echo -n "$i "
docker inspect -f '{{.Name}}' $i | tr -d "/"
fi
done
注意:本文归作者所有,未经作者允许,不得转载