新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 高性能的Linux集群監(jiān)控之道

高性能的Linux集群監(jiān)控之道

作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

◆ 有效壓縮

數(shù)值數(shù)據(jù)的文本表示由來(lái)自個(gè)字節(jié)集中的字符組成而不是二進(jìn)制下的個(gè)字節(jié)集它們產(chǎn)生的數(shù)字及模式的相對(duì)頻率允許有效地使用基于壓縮算法的字典及熵(平均信息量)

/proc虛擬文件系統(tǒng)

/proc虛擬文件系統(tǒng)(也叫procfs)是Unix操作系統(tǒng)所使用的虛擬文件系統(tǒng)的實(shí)現(xiàn)包括Sun SolarisBSD在/proc開(kāi)始時(shí)它以一個(gè)標(biāo)準(zhǔn)文件系統(tǒng)出現(xiàn)并包含與正在運(yùn)行的進(jìn)程IDs同樣名字的文件然而在/proc中的文件不占用磁盤(pán)空間它們存在于工作存儲(chǔ)器(內(nèi)存)中/proc最初的目的是便于進(jìn)程信息的存取但是現(xiàn)在在中它可被內(nèi)核的每一部分使用來(lái)報(bào)告某些事情

在/proc文件系統(tǒng)提供的成百上千的值當(dāng)中我們將集中考慮所需的最小集它們包括

◆ /proc/loadavg包含系統(tǒng)負(fù)載平均值;

◆ /proc/meminfo包含存儲(chǔ)管理統(tǒng)計(jì)量;

◆ /proc/net/dev包含網(wǎng)卡度量;

◆ /proc/stat包含內(nèi)核統(tǒng)計(jì)量;

◆ /proc/uptime包含總的系統(tǒng)正常工作時(shí)間及空閑時(shí)間

每個(gè)文件提供的值的數(shù)量是不同的這些文件的完整有效值列表如下

◆ /proc/loadavg提供以下數(shù)據(jù)

秒鐘平均負(fù)載;

秒鐘平均負(fù)載;

秒鐘平均負(fù)載;

總作業(yè)數(shù);

正在運(yùn)行的作業(yè)總數(shù)

◆ /proc/meminfo提供的存儲(chǔ)器信息包括

活動(dòng)存儲(chǔ)器;

不活動(dòng)存儲(chǔ)器;

緩沖存儲(chǔ)器;

高速緩沖存儲(chǔ)器;

總的自由存儲(chǔ)器;

總的高位存儲(chǔ)器;

自由高位存儲(chǔ)器;

總的低位存儲(chǔ)器;

自由低位存儲(chǔ)器;

共享存儲(chǔ)器;

交換存儲(chǔ)器;

交換高速緩沖存儲(chǔ)器;

交換自由存儲(chǔ)器;

總存儲(chǔ)器

◆ /proc/net/dev中包括每個(gè)網(wǎng)卡的如下數(shù)據(jù)

接收到的字節(jié);

接收到的壓縮字節(jié);

收到的誤碼數(shù);

收到的漏失誤碼;

收到的FIFO誤碼;

收到的幀誤碼;

收到的多播誤碼;

收到的總包數(shù);

已傳輸?shù)淖止?jié);

已傳輸?shù)膲嚎s字節(jié);

傳輸誤碼總數(shù);

傳輸載波誤碼;

傳輸沖突誤碼;

傳輸漏失誤碼;

傳輸FIFO誤碼;

傳輸?shù)目偘鼣?shù)

◆ /proc/stat提供

引導(dǎo)時(shí)間;

上下文切換數(shù)量;

中斷總量;

進(jìn)頁(yè)面總數(shù);

出頁(yè)面總數(shù);

進(jìn)程總數(shù);

換入總數(shù);

換出總數(shù);

合計(jì)CPU空閑時(shí)間;

合計(jì)CPU nice時(shí)間;

合計(jì)CPU系統(tǒng)時(shí)間;

合計(jì)CPU用戶(hù)時(shí)間

同時(shí)提供對(duì)每個(gè)CPU的:

單個(gè)CPU空閑時(shí)間;

單個(gè)CPU nice時(shí)間;

單個(gè)CPU系統(tǒng)時(shí)間;

單個(gè)CPU用戶(hù)時(shí)間

以及對(duì)每個(gè)磁盤(pán)驅(qū)動(dòng)器的如下數(shù)據(jù)

單個(gè)磁盤(pán)塊讀;

單個(gè)磁盤(pán)塊寫(xiě);

單個(gè)磁盤(pán)I/O總數(shù);

單個(gè)磁盤(pán)I/O讀;

單個(gè)磁盤(pán)I/O寫(xiě)

◆ /proc/uptime中包括

系統(tǒng)總工作時(shí)間;

系統(tǒng)總空閑時(shí)間

值得注意的是每次某個(gè)/proc被讀時(shí)一個(gè)句柄函數(shù)都被內(nèi)核或特有模塊調(diào)用來(lái)產(chǎn)生數(shù)據(jù)數(shù)據(jù)在運(yùn)行中產(chǎn)生不管是讀一個(gè)字符還是一個(gè)大的字塊整個(gè)文件都將被重建這對(duì)效率是至關(guān)重要的一點(diǎn)因?yàn)槭褂?proc的任何系統(tǒng)監(jiān)控器將吞下整個(gè)文件而不是一點(diǎn)一點(diǎn)地處理它

Java提供了豐富的文件I/O類(lèi)集包括基于類(lèi)的流基于類(lèi)的塊設(shè)備以及JSDK 提供的新的I/O庫(kù)實(shí)驗(yàn)表明一般而言對(duì)基本的塊讀寫(xiě)文件操作用RandomAccessFile類(lèi)進(jìn)行I/O是最佳的例如塊讀文件操作如下

mFile = new RandomAccessFile( /proc/meminfo r );

//以讀方式打開(kāi)文件

mFileread( mBuffer ); //讀文件塊

結(jié)論

本文討論了如何將Java語(yǔ)言有效地用于Linux集群結(jié)點(diǎn)上的高性能監(jiān)控在程序設(shè)計(jì)中要注意以下方面

◆ 采用/proc文件系統(tǒng);

◆ 以塊形式讀/proc文件而不是以行或字符形式;

◆ 在讀文件期間保持文件打開(kāi);

◆ 消除不必要的數(shù)據(jù)轉(zhuǎn)換;

◆ 在結(jié)點(diǎn)上合并數(shù)據(jù);

◆ 以壓縮形式傳輸數(shù)據(jù);

◆ 注意與性能問(wèn)題相關(guān)的語(yǔ)言或庫(kù)

對(duì)高性能監(jiān)控而言?xún)?nèi)核模塊不是必要條件這點(diǎn)很重要因?yàn)樗贚inux版本和分類(lèi)之間提供了很大程度的可移植性在監(jiān)控器實(shí)現(xiàn)語(yǔ)言上有很多的選擇但是/proc文件系統(tǒng)的性能卻很依賴(lài)內(nèi)核代碼的效率因此適當(dāng)?shù)乩斫庥嘘P(guān)的機(jī)制將對(duì)以任何語(yǔ)言編寫(xiě)的監(jiān)控器性能有非常大的影響。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Linux 集群監(jiān)控

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉