這篇文章給大家分享的是有關(guān)docker stats命令源碼的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)專注于恒山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供恒山營銷型網(wǎng)站建設(shè),恒山網(wǎng)站制作、恒山網(wǎng)頁設(shè)計、恒山網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造恒山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供恒山網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
本文是基于docker 1.10.3版本的源碼,對docker stats命令進行源碼分析,看看docker stats命令輸出的數(shù)據(jù)是從cgroups fs中怎么怎么計算出來的。
$ docker stats nginx-test
|CONTAINER|CPU % |MEM USAGE / LIMIT|MEM %|NET I/O |BLOCK I/O | |---|---|---|---|---|---| | nginx-test|0.00% | 4.268 MB / 1.041 GB | 0.41% | 1.296 kB / 648 B | 7.463 MB / 0 B|
docker client相關(guān)代碼入口可參考:/docker/docker/api/client/stats.go#141 docker daemon相關(guān)代碼入口可參考:/docker/docker/daemon/daemon.go#1474
##源碼分析結(jié)果 ###Cpu數(shù)據(jù): docker daemon會記錄這次讀取/sys/fs/cgroup/cpuacct/docker/[containerId]/cpuacct.usage的值,作為cpu_total_usage;并記錄了上一次讀取的該值為pre_cpu_total_usage;
讀取/proc/stat中cpu field value,并進行累加,得到system_usage;并記錄上一次的值為pre_system_usage;
讀取/sys/fs/cgroup/cpuacct/docker/[containerId]/cpuacct.usage_percpu中的記錄,組成數(shù)組per_cpu_usage_array;
docker stats計算Cpu Percent的算法:
cpu_delta = cpu_total_usage - pre_cpu_total_usage; system_delta = system_usage - pre_system_usage; CPU % = ((cpu_delta / system_delta) * length(per_cpu_usage_array) ) * 100.0
###Memory數(shù)據(jù):
讀取/sys/fs/cgroup/memory/docker/[containerId]/memory.usage_in_bytes的值,作為mem_usage;
如果容器限制了內(nèi)存,則讀取/sys/fs/cgroup/memory/docker/[id]/memory.limit_in_bytes作為mem_limit,否則mem_limit = machine_mem;
docker stats計算Memory數(shù)據(jù)的算法:
MEM USAGE = mem_usage MEM LIMIT = mem_limit MEM % = (mem_usage / mem_limit) * 100.0
獲取屬于該容器network namespace veth pairs在主機中對應(yīng)的veth*虛擬網(wǎng)卡EthInterface數(shù)組,然后循環(huán)數(shù)組中每個網(wǎng)卡設(shè)備,讀取/sys/class/net/<EthInterface>/statistics/rx_bytes得到rx_bytes, 讀取/sys/class/net/<EthInterface>/statistics/tx_bytes得到對應(yīng)的tx_bytes。
將所有這些虛擬網(wǎng)卡對應(yīng)的rx_bytes累加得到該容器的rx_bytes。
將所有這些虛擬網(wǎng)卡對應(yīng)的tx_bytes累加得到該容器的tx_bytes。
docker stats計算Network IO數(shù)據(jù)的算法:
NET I = rx_bytes NET O = tx_bytes
###Blkio Stats數(shù)據(jù): 獲取每個塊設(shè)備的IoServiceBytesRecursive數(shù)據(jù):先去讀取/sys/fs/cgroup/blkio/docker/[containerId]/blkio.io_serviced_recursive中是否有有效值,
如果有,則讀取/sys/fs/cgroup/blkio/docker/[containerId]/blkio.io_service_bytes_recursive的值返回;
如果沒有,就去讀取/sys/fs/cgroup/blkio/docker/[containerId]/blkio.throttle.io_service_bytes中的值返回;
將每個塊設(shè)備的IoServiceBytesRecursive數(shù)據(jù)中所有read field對應(yīng)value進行累加,得到該容器的blk_read值; 將每個塊設(shè)備的IoServiceBytesRecursive數(shù)據(jù)中所有write field對應(yīng)value進行累加,得到該容器的blk_write值;
docker stats計算Block IO數(shù)據(jù)的算法:
BLOCK I = blk_read BLOCK O = blk_write
感謝各位的閱讀!關(guān)于“docker stats命令源碼的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
分享題目:dockerstats命令源碼的示例分析
轉(zhuǎn)載來源:http://www.jinyejixie.com/article10/jogego.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)頁設(shè)計公司、建站公司、用戶體驗、網(wǎng)站改版、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)