Docker檢視應用的實際記憶體

2022-01-20 09:27:19 字數 1987 閱讀 8179

我們把應用部署到docker裡面之後,有什麼辦法檢視這個應用占用了多少記憶體呢?

docker本身提供了乙個命令讓我們可以直接看到當前時間所有容易占用的情況。

從上面來看,這幾個應用用的記憶體加起來已經是將近12g了。

但是,這個時候看到機器使用的記憶體還不到2g。

第一反應就是,docker 這個統計太離譜,太坑人了。

查了一番資料過後,其實是計算的問題,也不能說那個是錯的。

注: 這裡的 docker 版本是docker version 20.10.2, build 2291f61

一般來說應用對記憶體的占用,這個指標其實是十分重要的,不然記憶體洩漏都難以發現。

如果我們想要看到應用比較真實的記憶體要怎麼做呢?

其實可以分成兩個步驟

找到應用的真實程序id(宿主機裡面的)

從宿主機的/proc/pid/status去看vmrss的值

docker inspect命令可以看到當前容器的一些資訊,裡面也包含了我們要找的這個 pid。

docker inspect -f '}' 容器id
這個時候就找到了對應的pid了。

ps看了一下這個pid確實是應用的。

這個時候第一步就完成了。

有了 pid 之後,要查記憶體就比較容易了。

直接cat /proc/pid/status就能看到了。

雖說這樣能找到某個應用具體的記憶體,但是每次都這樣去操作一遍也是挺麻煩的。

而且這樣操作一次只能查乙個應用,想看多個應用還要分多次。

既然有了上面的步驟,那麼我們就可以把這個整理成乙個指令碼,每次執行一下這個指令碼就可以了。

# 找出所有執行的容器

idnames=`docker ps --format "}|},"`

# 按,號分隔

old_ifs="$ifs"

ifs=","

arr=($idnames)

ifs="$old_ifs"

# 輸出 title

printf "%-15s %-30s %-15s\n" id name mem

# 遍歷所有容器

for item in $

do # 容器id和容器名字 按 | 分隔

old_ifs="$ifs"

ifs="|"

array=($item)

ifs="$old_ifs"

# 當前容器的pid

pid=`docker inspect -f '}' $`

# 當前容器的記憶體

mem=$(cat /proc/$pid/status|grep -e vmrss| awk '')

# 輸出結果

printf "%-15s %-30s %-15s\n" $ $ $[$mem / 1024]m

done

執行上面的指令碼後,就可以看到當前正在執行的容器的記憶體占用情況了。

現在看上去,占用大概是1g多,加上其他的記憶體占用,這個值看上去就和free看到的不到2g的使用記憶體比較接近了。

Docker之實際應用 docker安裝

docker 支援以下的 64 位 centos 版本 centos 7 centos 8 更高版本 該 centos extras 庫必須啟用。預設情況下,此倉庫是啟用的,但是如果已禁用它,則需要重新啟用它。建議使用 overlay2 儲存驅動程式。較舊的 docker 版本稱為 docker 或...

Docker容器應用日誌檢視

docker attach options 容器會連線到正在執行的容器,然後將容器的標準輸入 輸出和錯誤流資訊附在本地列印出來。命令中options的取值有三種 detach keys,no stdin,sig proxy。該命令只是進入容器終端,不會啟動新的程序。所以當你同時使用多個視窗進入該容器...

docker 檢視程序, 記憶體,cup 消耗

啟動 docker 容器,可以通過 docker inspect 檢視程序號 docker inspect f 通過 docker stats 檢視記憶體,cpu 使用 docker stats docker stats no stream docker stats container name d...