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