1. 程式人生 > 實用技巧 >Docker監控容器資源的佔用情況【轉】

Docker監控容器資源的佔用情況【轉】

啟動一個容器並限制資源

啟動一個centos容器,限制其記憶體為1G ,可用cpu數為2

[root@localhost ~]# docker run --name os1 -it -m 1g --cpus=2 centos:latest bash

啟動容器後,可以使用docker 的監控指令檢視容器的執行狀態

  • docker top 容器名: 檢視容器的程序,不加容器名即檢視所有
  • docker stats 容器名:檢視容器的CPU,記憶體,IO 等使用資訊
[root@localhost ~]# docker stats os1
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
f9420cbbd2a9        os1                 45.94%              47.09MiB / 1GiB     4.60%               54.6MB / 352kB      0B / 21.1MB         3

安裝stress

在容器中安裝docker容器壓測工具 stress

#先安裝一些基礎工具
[root@f9420cbbd2a9 /]# yum install wget gcc gcc-c++ make -y
#下載stress
[root@f9420cbbd2a9 ~]# wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz
#安裝
[root@f9420cbbd2a9 ~]# tar zxf stress-1.0.4.tar.gz
[root@f9420cbbd2a9 ~]# cd stress-1.0.4
[root@f9420cbbd2a9 stress-1.0.4]./configure
[root@f9420cbbd2a9 stress-1.0.4]# make
[root@f9420cbbd2a9 stress-1.0.4]# make install

stress壓測

在容器使用stress指令進行負載壓測

[root@f9420cbbd2a9 ~]# stress  -m 1204m --vm 2
#模擬出4個繁忙的程序消耗cpu,然後使用-m 模擬程序最大使用的記憶體數1024,使用--vm 指定程序數

使用docker指令檢視容器執行狀態,可以os1容器的記憶體和cpu都得到了限制,即使給壓測時超出了最大記憶體,也不會額外佔用資源

[root@localhost ~]# docker stats os1
CONTAINER ID       NAME       CPU %            MEM USAGE / LIMIT  MEM %         NET I/O              BLOCK I/O           PIDS
f9420cbbd2a9        os1          127.46%          319.7MiB / 1GiB     31.22%        54.8MB / 356kB      0B / 33.6MB          9

Stress引數說明

-? 顯示幫助資訊
-v 顯示版本號
-q 不顯示執行資訊
-n,--dry-run 顯示已經完成的指令執行情況
-t --timeout N 指定執行N秒後停止
  --backoff N 等待N微妙後開始執行
-c --cpu 產生n個程序 每個程序都反覆不停的計算隨機數的平方根
-i --io 產生n個程序 每個程序反覆呼叫sync(),sync()用於將記憶體上的內容寫到硬碟上
-m --vm n 產生n個程序,每個程序不斷呼叫記憶體分配malloc和記憶體釋放free函式
  --vm-bytes B 指定malloc時記憶體的位元組數 (預設256MB)
  --vm-hang N 指示每個消耗記憶體的程序在分配到記憶體後轉入休眠狀態,與正常的無限分配和釋放記憶體的處理相反,這有利於模擬只有少量記憶體的機器
-d --hadd n 產生n個執行write和unlink函式的程序
  --hadd-bytes B 指定寫的位元組數,預設是1GB
  --hadd-noclean 不要將寫入隨機ASCII資料的檔案Unlink
時間單位可以為秒s,分m,小時h,天d,年y,檔案大小單位可以為K,M,G

Stress使用例項

  • 產生13個cpu程序4個io程序1分鐘後停止執行

$ stress -c 13 -i 4 --verbose --timeout 1m
  • 產生3個cpu程序、3個io程序、2個10M的malloc()/free()程序,並且vm程序中malloc的位元組不釋放

$ stress --cpu 3 --io 3 --vm 2 --vm-bytes 10000000 --vm-keep --verbose
  • 測試硬碟,通過mkstemp()生成800K大小的檔案寫入硬碟,對CPU、記憶體的使用要求很低

$ stress -d 1 --hdd-noclean --hdd-bytes 800k
  • 產生13個程序,每個程序都反覆不停的計算由rand ()產生隨機數的平方根

$ stress -c 13
  • 產生1024個程序,僅顯示出錯資訊

$ stress --quiet --cpu 1k
  • 產生4個程序,每個程序反覆呼叫sync(),sync()用於將記憶體上的內容寫到硬碟上

$ stress -i 4
  • 向磁碟中寫入固定大小的檔案,這個檔案通過呼叫mkstemp()產生並儲存在當前目錄下,預設是檔案產生後就被執行unlink(清除)操作,但是可以使用--hdd-bytes選項將產生的檔案全部儲存在當前目錄下,這會將你的磁碟空間逐步耗盡

# 生成小檔案
$ stress -d 1 --hdd-noclean --hdd-bytes 13

# 生成大檔案
$ stress -d 1 --hdd-noclean --hdd-bytes 3G