在實際工作環境中,一些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程序,占用記憶體較高,我們需要對它做一些限制。
二、通過程序号檢視程序運作在哪個容器
通過ps加參數的指令來擷取,
ps -e -o pid,cmd,comm,cgroup | grep 21905 #檢視程序在哪個容器内運作
ps:21905是我們查出來一個占用記憶體較高程序的pid
通過這條指令可以發現這個程序是運作在9ea1fc99d7fb這個容器裡的。在用docker ps|grep 容器id檢視容器的具體資訊。
docker ps|grep 9ea1fc99d7fb #可以檢視這個容器的具體資訊
知道了程序運作在哪個容器,就簡單多了,通過docker指令進入到容器中,對程序做一些限制就可以了。
docker exec -it 9ea1fc99d7fb /bin/bash #進入到容器