成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Container內(nèi)部進程監(jiān)控是怎樣的

這篇文章主要介紹“Container內(nèi)部進程監(jiān)控是怎樣的”,在日常操作中,相信很多人在Container內(nèi)部進程監(jiān)控是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Container內(nèi)部進程監(jiān)控是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元盤龍做網(wǎng)站,已為上家服務(wù),為盤龍各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

目前市場上的虛擬化技術(shù)種類很多,例如moby(docker)、LXC、RKT等等。在帶來方便應(yīng)用部署和資源充分利用的好處的同時,如何監(jiān)控相應(yīng)Container及其內(nèi)部應(yīng)用進程成為運維人員不可避免遇到的新情況。UAV.Container從虛擬化技術(shù)的基礎(chǔ)原理和Linux操作系統(tǒng)的內(nèi)核特性出發(fā),得到Container容器和內(nèi)部進程的各維度監(jiān)控數(shù)據(jù),使無論是虛擬機或物理機運維人員,還是業(yè)務(wù)運維人員角度,都能得到合適的監(jiān)控維度。

虛擬化技術(shù)從基礎(chǔ)原理上主要是cgroups、namespace和file system的應(yīng)用,而操作系統(tǒng)作為cgroup和namespace根節(jié)點,無論在container里啟動何種應(yīng)用,從內(nèi)核角度上來說,肯定在操作系統(tǒng)有其一定的特征和表現(xiàn)形式。我們需要做的就是對這些特征做加工處理,以得到相應(yīng)的監(jiān)控數(shù)據(jù)。

下面我們以docker技術(shù)舉例,其他虛擬化技術(shù)類似。

一、Container ID

Container ID是一個Container的唯一標(biāo)識。從容器監(jiān)控的角度我們需要能得到該進程在哪個Container里運行。在操作系統(tǒng)層面,進程的cgroup的掛載情況就能有所體現(xiàn)。如圖所示,我們在一個ID為3411554ff684的Container內(nèi)部跑一個Tomcat進程。

Container內(nèi)部進程監(jiān)控是怎樣的

由于Container的pid namespace是操作系統(tǒng)的pid namespace的子namespace,那么該進程在操作系統(tǒng)級也應(yīng)該有相應(yīng)的pid,用docker top命令驗證一下:

Container內(nèi)部進程監(jiān)控是怎樣的

該容器內(nèi)進程在宿主機上的進程號為1848。接下來進入/proc/1848/cgroup下看看該進程的cgroup掛載情況

Container內(nèi)部進程監(jiān)控是怎樣的

從cgroup文件里清楚的顯示了實現(xiàn)了該容器的虛擬化技術(shù)、Container ID和此container的資源掛載路徑,對比一下這里面顯示的Container ID,和創(chuàng)建Container時的ID完全相同。這也驗證了通過掃描宿主機進程的cgroup信息可以獲得Container ID。這樣就將pid和Container ID做了關(guān)聯(lián)。

二、CPU

雖然cgroup管控了該cgroup下所有進程的CPU使用情況,但從操作系統(tǒng)的角度上,不論進程是否隸屬于某個子cgroup下,仍然是共用宿主機的CPU。所以監(jiān)控宿主機上該進程的CPU就能得到進程的CPU監(jiān)控指標(biāo)。

Linux上常用的CPU監(jiān)控命令是top。top對CPU監(jiān)控的原理是在time1時刻獲取CPU從啟動時的累計總時間countAll1和busy總時間countBusy1,再到time2時刻獲取CPU總時間countAll2和busy總時間countBusy2,最后用busy的時間差值減去總時間的差值得到了在time1到time2這個時間段內(nèi)機器CPU的占用情況。也就是:

CPU占用率(%) = (countBusy2 - countBusy1)/(countAll2 - countAll1) * 100

進程同理,在兩個時刻分別得到每個進程的busy總時間countProcBusy1和countProcBusy2,則得到進程CPU占用率:

進程CPU占用率(%) = (countProcBusy2 - countProcBusy1)/(countProcAll2 - countProcAll1)*100

宿主機從啟動開始的CPU總時間片可以從/proc/stat下獲?。?/p>

Container內(nèi)部進程監(jiān)控是怎樣的

第一行是總的CPU使用情況,具體參數(shù)的意思:

所以,選擇當(dāng)前為time1,3秒后為time2,countAll = user + nice + system + idle + iowait + irq + softirq + stealstolean + guest + guest_nice。countBusy為countAll減去idle的值,這樣上面第一個公式的所有需要的值就齊了,可以直接計算。

第二行、第三行是每個邏輯CPU的使用情況,這里記下有兩個邏輯CPU,CPU的邏輯核數(shù)與CPU顯示模式irix和solaris有關(guān)。

接下來是countProcBusy的計算,進程的CPU時間片位于/proc/$pid/stat下,如圖所示:

Container內(nèi)部進程監(jiān)控是怎樣的

這個文件里面體現(xiàn)了很多進程的相關(guān)信息。其中第14、15、16、17個參數(shù)與CPU有關(guān)。

所以,countProcBusy = utime + stime + cutime + cstime,該值包括其所有線程的cpu時間。而countProcAll2-countProcAll1=3s,通過兩個時刻的countProcBusy和countProcAll,進程CPU的占用率就能得到了。

其中需要注意的問題有兩點:

1) jiffies實際上指的是內(nèi)核時鐘使用的節(jié)拍總數(shù),所以這里的jiffies需要換算成秒才能應(yīng)用上面的除法公式。

2) 剛剛我們談到CPU顯示模式irix和solaris,簡單來說irix模式就是機器有N個邏輯CPU,CPU顯示上限就是N*100%,solaris模式就是不管機器有多少邏輯CPU,CPU顯示上限就是100%,而/proc/$pid/stat顯示的是計算了所有邏輯CPU時間的,所以兩種顯示方式意味著計算方法稍有差異,solaris模式的結(jié)果需要在上面進程CPU占用率公式基礎(chǔ)之上除以邏輯核數(shù)。

三、內(nèi)存

進程內(nèi)存的監(jiān)控有兩個維度的數(shù)據(jù):一是物理占用內(nèi)存大小,二是進程內(nèi)存占用百分比的大小。

進程內(nèi)存占用率(%) = 進程物理內(nèi)存占用大小 / 宿主機總內(nèi)存大小 * 100

與CPU類似,/proc/$pid/status文件記錄了進程物理內(nèi)存使用情況,其中VmRSS即為該進程目前所占實際物理內(nèi)存的大小。

Container內(nèi)部進程監(jiān)控是怎樣的

/proc/meminfo文件下記錄了機器內(nèi)存占用情況,這個文件很長,截取其中的一部分展示一下,MemTotal就是宿主機總內(nèi)存大?。?/p>

Container內(nèi)部進程監(jiān)控是怎樣的

這樣,這個進程的物理內(nèi)存占用和機器總內(nèi)存就都得到了,相應(yīng)的進程內(nèi)存的占用率也就得到了。

四、磁盤IO

磁盤IO獲取也很簡單,/proc/$pid/io已經(jīng)幫我們把這個進程的io情況記錄下來了,但是與CPU類似,io文件里存的也是該進程從啟動到現(xiàn)在的io總量,那么:

磁盤I/O(bytes/秒) = (time2時刻I/O – time1時刻I/O) / (time2 – time1)

Container內(nèi)部進程監(jiān)控是怎樣的

其中的read_bytes和write_bytes分別為該進程從啟動到目前為止的讀取字節(jié)數(shù)和寫入字節(jié)數(shù),分別取2個時刻的值,根據(jù)上面的公式,就得到了該進程的磁盤IO。

五、端口號和連接數(shù)

由于Network Namespace對網(wǎng)絡(luò)做了隔離,所以如果進程在Container內(nèi)部運行,該進程的端口信息也應(yīng)該是進程本身監(jiān)聽的端口號,而不是真正實際對外的端口,而Container內(nèi)外端口的映射機制是由應(yīng)用的虛擬化技術(shù)本身控制的,這就避免不了與實現(xiàn)容器的虛擬化技術(shù)打交道了,那么問題就轉(zhuǎn)化成獲取容器內(nèi)進程本身監(jiān)聽的端口了。

/proc/$pid/net/tcp(tcp6,udp,udp6)就對端口號和連接數(shù)做了相應(yīng)的歷史記錄。這些文件格式都類似,以tcp6舉例

Container內(nèi)部進程監(jiān)控是怎樣的

解釋幾個關(guān)鍵的key:

因為st = 0A代表listen,所以從其中挑選出st = 0A的數(shù)據(jù),取出對應(yīng)的inode號,這里這個inode號是socket號,則問題轉(zhuǎn)換為了這個進程是否還存在這個socket號代表的socket。在/proc/$pid/fd下有該進程所有的fd(file descriptor),截取一段舉個例子。

Container內(nèi)部進程監(jiān)控是怎樣的

每個文件描述符后面的軟鏈實際上就是打開的文件,以socket開頭的就是這個進程打開的socket,在中括號中間的部分就是socket號。拿著這個socket號和上面tcp6里獲得的inode號做一個匹配,如果對應(yīng)上,那么tcp6里的st = 0A的端口就是這個進程監(jiān)聽的。至于容器內(nèi)外端口的映射,這就需要根據(jù)應(yīng)用的虛擬化技術(shù)的映射方法來獲取了。連接數(shù)計算與端口掃描是同理的,區(qū)別只在于需要對st = 01(establish)進行掃描計數(shù)累加。

到此,關(guān)于“Container內(nèi)部進程監(jiān)控是怎樣的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

本文題目:Container內(nèi)部進程監(jiān)控是怎樣的
標(biāo)題網(wǎng)址:http://jinyejixie.com/article14/poccde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司虛擬主機、網(wǎng)站排名、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作定制開發(fā)

廣告

聲明:本網(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)

成都做網(wǎng)站
莱阳市| 临夏市| 瑞安市| 岐山县| 铜陵市| 阜阳市| 双峰县| 方城县| 丹阳市| 睢宁县| 通辽市| 平罗县| 赣州市| 平谷区| 德阳市| 楚雄市| 平舆县| 来安县| 宁乡县| 任丘市| 宜章县| 临泽县| 淄博市| 兴业县| 武强县| 辽阳市| 荣成市| 衡阳县| 普宁市| 开江县| 九龙县| 临夏市| 金阳县| 凤山县| 栖霞市| 武城县| 嘉兴市| 西乌| 施秉县| 宜阳县| 香河县|