高性能的Linux集群監(jiān)控之道
◆ 有效壓縮
數(shù)值數(shù)據(jù)的文本表示由來自個字節(jié)集中的字符組成而不是二進制下的個字節(jié)集它們產(chǎn)生的數(shù)字及模式的相對頻率允許有效地使用基于壓縮算法的字典及熵(平均信息量)
/proc虛擬文件系統(tǒng)
/proc虛擬文件系統(tǒng)(也叫procfs)是Unix操作系統(tǒng)所使用的虛擬文件系統(tǒng)的Linux實現(xiàn)包括Sun SolarisLinuxBSD在/proc開始時它以一個標準文件系統(tǒng)出現(xiàn)并包含與正在運行的進程IDs同樣名字的文件然而在/proc中的文件不占用磁盤空間它們存在于工作存儲器(內(nèi)存)中/proc最初的目的是便于進程信息的存取但是現(xiàn)在在Linux中它可被內(nèi)核的每一部分使用來報告某些事情
在/proc文件系統(tǒng)提供的成百上千的值當中我們將集中考慮集群監(jiān)控所需的最小集它們包括
◆ /proc/loadavg包含系統(tǒng)負載平均值;
◆ /proc/meminfo包含存儲管理統(tǒng)計量;
◆ /proc/net/dev包含網(wǎng)卡度量;
◆ /proc/stat包含內(nèi)核統(tǒng)計量;
◆ /proc/uptime包含總的系統(tǒng)正常工作時間及空閑時間
每個文件提供的值的數(shù)量是不同的這些文件的完整有效值列表如下
◆ /proc/loadavg提供以下數(shù)據(jù)
秒鐘平均負載;
秒鐘平均負載;
秒鐘平均負載;
總作業(yè)數(shù);
正在運行的作業(yè)總數(shù)
◆ /proc/meminfo提供的存儲器信息包括
活動存儲器;
不活動存儲器;
緩沖存儲器;
高速緩沖存儲器;
總的自由存儲器;
總的高位存儲器;
自由高位存儲器;
總的低位存儲器;
自由低位存儲器;
共享存儲器;
交換存儲器;
交換高速緩沖存儲器;
交換自由存儲器;
總存儲器
◆ /proc/net/dev中包括每個網(wǎng)卡的如下數(shù)據(jù)
接收到的字節(jié);
接收到的壓縮字節(jié);
收到的誤碼數(shù);
收到的漏失誤碼;
收到的FIFO誤碼;
收到的幀誤碼;
收到的多播誤碼;
收到的總包數(shù);
已傳輸?shù)淖止?jié);
已傳輸?shù)膲嚎s字節(jié);
傳輸誤碼總數(shù);
傳輸載波誤碼;
傳輸沖突誤碼;
傳輸漏失誤碼;
傳輸FIFO誤碼;
傳輸?shù)目偘鼣?shù)
◆ /proc/stat提供
引導時間;
上下文切換數(shù)量;
中斷總量;
進頁面總數(shù);
出頁面總數(shù);
進程總數(shù);
換入總數(shù);
換出總數(shù);
合計CPU空閑時間;
合計CPU nice時間;
合計CPU系統(tǒng)時間;
合計CPU用戶時間
同時提供對每個CPU的:
單個CPU空閑時間;
單個CPU nice時間;
單個CPU系統(tǒng)時間;
單個CPU用戶時間
以及對每個磁盤驅(qū)動器的如下數(shù)據(jù)
單個磁盤塊讀;
單個磁盤塊寫;
單個磁盤I/O總數(shù);
單個磁盤I/O讀;
單個磁盤I/O寫
◆ /proc/uptime中包括
系統(tǒng)總工作時間;
系統(tǒng)總空閑時間
值得注意的是每次某個/proc被讀時一個句柄函數(shù)都被內(nèi)核或特有模塊調(diào)用來產(chǎn)生數(shù)據(jù)數(shù)據(jù)在運行中產(chǎn)生不管是讀一個字符還是一個大的字塊整個文件都將被重建這對效率是至關(guān)重要的一點因為使用/proc的任何系統(tǒng)監(jiān)控器將吞下整個文件而不是一點一點地處理它
Java提供了豐富的文件I/O類集包括基于類的流基于類的塊設備以及JSDK 提供的新的I/O庫實驗表明一般而言對基本的塊讀寫文件操作用RandomAccessFile類進行I/O是最佳的例如塊讀文件操作如下
mFile = new RandomAccessFile( /proc/meminfo r );
//以讀方式打開文件
mFileread( mBuffer ); //讀文件塊
結(jié)論
本文討論了如何將Java語言有效地用于Linux集群結(jié)點上的高性能監(jiān)控在程序設計中要注意以下方面
◆ 采用/proc文件系統(tǒng);
◆ 以塊形式讀/proc文件而不是以行或字符形式;
◆ 在讀文件期間保持文件打開;
◆ 消除不必要的數(shù)據(jù)轉(zhuǎn)換;
◆ 在結(jié)點上合并數(shù)據(jù);
◆ 以壓縮形式傳輸數(shù)據(jù);
◆ 注意與性能問題相關(guān)的語言或庫
對高性能監(jiān)控而言內(nèi)核模塊不是必要條件這點很重要因為它在Linux版本和分類之間提供了很大程度的可移植性在監(jiān)控器實現(xiàn)語言上有很多的選擇但是/proc文件系統(tǒng)的性能卻很依賴內(nèi)核代碼的效率因此適當?shù)乩斫庥嘘P(guān)的機制將對以任何語言編寫的監(jiān)控器性能有非常大的影響。
評論