天天看点

Linux服务器查看进程运行在哪个容器

作者:易墨随记

在实际工作环境中,一些linux服务器会部署大量服务,有些服务是部署在服务器本身,有些服务是部署在docker容器中,当某个进程因为某些原因开始占用大量内存或CPU时,通过top命令查看占用内存、CPU过高的进程,在用ps -ef|grep 进程号,查看具体哪个进程时,无法识别这个进程是宿主机运行的,还是daocker'容器运行的。

今天给大家介绍一种可以排查进程是容器运行,还是宿主机运行的方法。

一、 查看占用内存或CPU较高的进程

我们除了top命令以外,还可以用以下命令查看占用cpu和内存前十的进程

ps aux|head -1;ps aux|sort -rn -k +3|head     #查看占用CPU前十的进程
ps aux|head -1;ps aux|sort -rn -k +4|head     #查看占用内存前十的进程           

head 默认获取10行,可以在后面加-n 控制显示数量,如获取三行

ps aux|head -1;ps aux|sort -rn -k +3|head -3
           

我们先用top命令查看一下,发现第一个是java进程,占用内存较高,我们需要对它做一些限制。

Linux服务器查看进程运行在哪个容器

二、通过进程号查看进程运行在哪个容器

通过ps加参数的命令来获取,

ps -e -o pid,cmd,comm,cgroup | grep 21905 #查看进程在哪个容器内运行           

ps:21905是我们查出来一个占用内存较高进程的pid

Linux服务器查看进程运行在哪个容器

通过这条命令可以发现这个进程是运行在9ea1fc99d7fb这个容器里的。在用docker ps|grep 容器id查看容器的具体信息。

docker ps|grep 9ea1fc99d7fb     #可以查看这个容器的具体信息           
Linux服务器查看进程运行在哪个容器

知道了进程运行在哪个容器,就简单多了,通过docker命令进入到容器中,对进程做一些限制就可以了。

docker exec -it 9ea1fc99d7fb /bin/bash #进入到容器           

继续阅读