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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM