十八個“盜夢圖騰”助你擺脫運維“夢魘”
利用中秋小假,我觀看了最近備受熱議的電影《盜夢空間》。影片中的盜夢團隊筑造的夢中夢體現(xiàn)了復(fù)雜邏輯的魅力。該電影所引發(fā)的熱議甚至比起電影本身更精彩。雖然現(xiàn)實中人不需要防御“盜夢者”,但是計算機系統(tǒng)卻是隨處可遇“盜夢者”,那么作為系統(tǒng)管理員究竟該如何抵御這些“盜夢者”呢?
首先允許我先介紹下《盜夢空間》這部電影的主要內(nèi)容:《盜夢空間》是由《黑暗騎士》導(dǎo)演克里斯托夫·諾蘭執(zhí)導(dǎo),萊昂納多主演的一部具有很強邏輯思維和數(shù)學理論為基墊的電影。主要講男主角科布(萊昂納多飾)領(lǐng)導(dǎo)的盜夢團隊筑造了一個夢中夢(共有4層夢境),目的是將一個思想注入能源大亨繼承人費舍爾(希里安·墨菲飾演)的頭腦中,讓其放棄繼承龐大的遺產(chǎn)。
▲電影《盜夢空間》宣傳海報
有資深影迷評論稱,影片中的多重夢境實際上是利用程序算法中的遞歸思維。假設(shè)做夢是一個函數(shù)Dream(),那么夢中夢就是該函數(shù)的遞歸調(diào)用。比起一般的遞歸調(diào)用來,該程序的特殊之處是,它是一個多線程的遞歸調(diào)用,也即是說每一次遞歸都會新建一個線程來執(zhí)行函數(shù)體。因此該遞歸函數(shù)有兩種結(jié)束機制,一種是wait超時(藥物失效),另一種是由其調(diào)用函數(shù)來結(jié)束(kick)。這就好比影片中,當需要進入下一層夢境,就必須注入藥物,當需要返回上一層夢境,就必須以自殺形式結(jié)束。
而由于硬件平臺所限,該遞歸只能進行四層,因為每次遞歸都需要消耗系統(tǒng)資源,所以遞歸深一層,系統(tǒng)運行就越慢(夢境每深一層,時間就變慢20倍)。一旦在第四層的時候資源耗盡(做夢者生命耗盡),就會產(chǎn)生棧溢出,因此線程就會進入僵死狀態(tài)(limbo狀態(tài))。而一旦將運行超時時間設(shè)置得過長(強力鎮(zhèn)靜藥物),則會導(dǎo)致子線程運行過長從而耗盡資源。此時如果子線程還沒有被上層調(diào)用函數(shù)強制結(jié)束(撞擊),則會被detach(在夢中死去),因此進入僵死狀態(tài)(進入limbo狀態(tài))。而為什么多層次的夢喚醒需要同步撞擊呢,這就跟我們析構(gòu)一個含有指針的STL容器一樣,如果不遵守順序,那么就會出現(xiàn)容器被析構(gòu)而指針內(nèi)容還在從而發(fā)生內(nèi)存泄露的問題。
總的來說整個電影的夢中夢的營造就是利用多重遞歸的三個操作:入棧(pushing),彈出(popping)、堆棧(stacks)。其中“入棧”就是暫停手頭工作、標記停止地點、開始另一項工作,新工作比原工作要“低一個層次”?!皬棾觥本褪墙Y(jié)束低層次的工作、在上一層次暫停的地方恢復(fù)原工作?!岸褩!庇脕碛涗洉和5攸c的環(huán)境信息。例如接電話過程中有新電話進來,于是暫停第一個電話開始接第二個電話,不一會又暫停第二個電話來接第三個電話……堆??梢杂涗浤憬Y(jié)束當前電話后該回到第幾個電話、該電話是誰打來的、暫停時你們談到哪兒了。人們很容易在多重嵌套中迷失,這時候堆棧的作用就很重要。只要堆棧記錄準確,我們就不會搞混各種層次。
顯然,《盜夢空間》中多重嵌套的夢就是“遞歸”,入夢機器負責“推入”,穿越操作用來“彈出”,每層夢中留守的人就是“堆棧”,負責維持現(xiàn)場環(huán)境以確保成功穿越。
作為一個盜夢團隊,盜夢的目的其實跟計算機安全中的緩沖區(qū)溢出攻擊是同理的,也就是利用程序漏洞(人的性格弱點),向其地址空間對應(yīng)于人的頭腦)植入可執(zhí)行代碼(想法),從而可以在對方的系統(tǒng)(大腦)中執(zhí)行自己的特權(quán)指令(解散Fisher的公司)。
盜夢巧妙的應(yīng)用了程序設(shè)計思想,同時也證明了再完善的系統(tǒng)也是存在漏洞的的,只有全面了解你的系統(tǒng)才能做好充足的安全防御工作,而系統(tǒng)監(jiān)控就是安全防御的第一步,接下來就向大家介紹10款優(yōu)秀的監(jiān)控工具、以及常用內(nèi)存監(jiān)控和系統(tǒng)性能監(jiān)控工具。
#p#
為確保公司的服務(wù)器穩(wěn)定的運轉(zhuǎn),只是抱著“服務(wù)器不要出故障”的希望是沒用的,我們需要時刻了解服務(wù)器的狀況。
一位國外的技術(shù)博主在博客上介紹了他認為不錯的十個服務(wù)器監(jiān)控工具。這一些列工具可以監(jiān)控到服務(wù)器方方面面的信息,從運行時間、性能到安全,甚至到服務(wù)器所處的物理環(huán)境指數(shù)。基本上通過這些工具,你可以了解到服務(wù)器可能會出現(xiàn)什么問題,并在問題出現(xiàn)之前解決它們。
1. Pingdom
▲
Pingdom可以監(jiān)測運行時間和整體性能,并生成便于閱讀的表格和圖表。Pingdom提供iPhone應(yīng)用版本,如果沒有iPhone,則可以使用email和短信警告的功能。
2. Dotcom-Monitor
▲
Dotcom-Monitor是一個增強的網(wǎng)站監(jiān)控服務(wù),這個服務(wù)可以延長你的服務(wù)器運行時間。這個服務(wù)提供實時的以及email的報告和圖表,并可以指定將警告發(fā)給哪些特定的負責人。Dotcom-Monitor支持多用戶、多權(quán)限的功能。
3. McAfee Secure
▲
McAfee Secure監(jiān)測服務(wù)器的潛在安全漏洞,防止網(wǎng)站的訪問者遭遇身份泄露、惡意軟件、垃圾郵件、病毒等不良事物。McAfee Secure將會每天檢查你的網(wǎng)站。
4. Webmetrics GlobalWatch
▲
GlobalWatch監(jiān)測網(wǎng)站、互聯(lián)網(wǎng)應(yīng)用和服務(wù)的情況,包括宕機時間、服務(wù)器錯誤、性能低下的原因等問題的識別與分析,并提供性能測量的詳細報告以及靈活的警告功能。這個強大的工具支持Web 2.0,AJAX以及Flash和Java等嵌入式應(yīng)用,并可以真實向你反應(yīng)美國、亞洲、非洲和歐洲等地區(qū)的用戶訪問你網(wǎng)站的情況。
5. Nimsoft Monitoring Solutions(NMS)
▲
NMS監(jiān)控服務(wù)器以及之上配置的應(yīng)用。從CPU到內(nèi)存、事件日志、打印任務(wù)和隊列等全部核心資源都被詳細的監(jiān)控。NMS的安裝很快捷,程序本身是輕量級的(你可以只安裝你需要的組件),而且有良好的伸縮性(你可以同時監(jiān)控上百乃至上千的服務(wù)器)。NMS控制臺的界面也相當簡潔明了。
6. Solarwinds Orion Network Performance Monitor(NPM)
▲
Orion NPM可以確保你的每臺服務(wù)器都以100%的效率運行,同時監(jiān)控網(wǎng)絡(luò)上所有的路由器、交換機以及無線連接點的情況。這個軟件安裝便捷,而上百技術(shù)支持人員都是專業(yè)的網(wǎng)絡(luò)工程師。使用起來相當?shù)纳倒鲜健?/P>
7. Nagios
▲
Nagios是一個完備的IT基礎(chǔ)設(shè)施監(jiān)控系統(tǒng),它可以為整個操作網(wǎng)絡(luò)進行快照,同時監(jiān)控所有應(yīng)用、服務(wù)、操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議和系統(tǒng)的健康狀況。一旦出現(xiàn)問題,你的IT員工將通過email和短信接到即時警告,而出錯的服務(wù)器、應(yīng)用和設(shè)備會自動重啟。Nagios適合幾乎所有內(nèi)置的以及第三方應(yīng)用。
8. ENVIROMUX Server Environment Monitoring System
▲
這是個強大的工具,極其適合在數(shù)據(jù)中心、Web托管設(shè)施、電信交換站點以及服務(wù)器機房等場所使用。這個工具可以檢測溫度,濕度,液體泄露,震動等物理參數(shù)。你可以將這個系統(tǒng)和攝像頭集成,從而從世界各地監(jiān)控到場所的情況。
9. Jacarta interSeptor Pro
▲
Jacarta interSeptor Pro記錄服務(wù)器周圍的溫度和濕度的情況并制作圖表。軟件在周圍環(huán)境需要調(diào)整的時候發(fā)出email或短信提示。有三種模式可以選擇:8口,16口以及24口的。添加更多的感應(yīng)器可以監(jiān)控液體泄露、煙塵和斷電等情況。
10. Simple Server Monitor
▲
imple Server Monitor是一個低預(yù)算的監(jiān)控服務(wù),不過功能相當齊全,包括精確到分鐘的運行時間監(jiān)控,以及性能圖表。提醒渠道包括彈出消息窗口,桌面提醒,電子郵件和短信等方式。
#p#
電影中盜夢的目的跟計算機安全中的緩沖區(qū)溢出攻擊是同理的,也就是利用程序漏洞(人的性格弱點),所以系統(tǒng)內(nèi)存的使用情況對于系統(tǒng)而言是相當重要的。而作為系統(tǒng)管理員懂得如何查看內(nèi)存使用情況是非常重要的。
Windows系統(tǒng)中查看內(nèi)存的使用情況很簡單,這里就不再重復(fù)了。重點要介紹的是在Linux系統(tǒng)下查看內(nèi)存使用情況的free命令:
下面是對這些數(shù)值的解釋:
total:總計物理內(nèi)存的大小。
used:已使用多大。
free:可用有多少。
Shared:多個進程共享的內(nèi)存總額。
Buffers/cached:磁盤緩存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解釋了。
區(qū)別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區(qū)別。 這兩個的區(qū)別在于使用的角度來看,第一行是從OS的角度來看,因為對于OS,buffers/cached 都是屬于被使用,所以他的可用內(nèi)存是16176KB,已用內(nèi)存是3250004KB,其中包括,內(nèi)核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是從應(yīng)用程序角度來看,對于應(yīng)用程序來說,buffers/cached 是等于可用的,因為buffer/cached是為了提高文件讀取的性能,當應(yīng)用程序需在用到內(nèi)存的時候,buffer/cached會很快地被回收。
所以從應(yīng)用程序的角度來說,可用內(nèi)存=系統(tǒng)free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236
接下來解釋什么時候內(nèi)存會被交換,以及按什么方交換。 當可用內(nèi)存少于額定值的時候,就會開會進行交換。
如何看額定值:
用free -m查看的結(jié)果:
查看/proc/kcore文件的大小(內(nèi)存鏡像):
備注:占用內(nèi)存的測量
測量一個進程占用了多少內(nèi)存,Linux系統(tǒng)為我們提供了一個很方便的方法,/proc目錄為我們提供了所有的信息,實際上top等工具也通過這里來獲取相應(yīng)的信息。
輸出解釋:
CPU 每行的每個參數(shù)意思(以第一行為例)為:
參數(shù) 解釋 /proc//status
Size (pages) 任務(wù)虛擬地址空間的大小 VmSize/4
Resident(pages) 應(yīng)用程序正在使用的物理內(nèi)存的大小 VmRSS/4
Shared(pages) 共享頁數(shù) 0
Trs(pages) 程序所擁有的可執(zhí)行虛擬內(nèi)存的大小 VmExe/4
Lrs(pages) 被映像到任務(wù)的虛擬內(nèi)存空間的庫的大小 VmLib/4
Drs(pages) 程序數(shù)據(jù)段和用戶態(tài)的棧的大小 (VmData+ VmStk )4
dt(pages) 04
查看機器可用內(nèi)存:
我們通過free命令查看機器空閑內(nèi)存時,會發(fā)現(xiàn)free的值很小。這主要是因為,在Linux系統(tǒng)中有這么一種思想,內(nèi)存不用白不用,因此它盡可能的cache和buffer一些數(shù)據(jù),以方便下次使用。但實際上這些內(nèi)存也是可以立刻拿來使用的。
所以 空閑內(nèi)存=free+buffers+cached=total-used
服務(wù)器系統(tǒng)性能的監(jiān)測可以定期有效地查看系統(tǒng)的運行狀況。Linux系統(tǒng)下,大多數(shù)的性能監(jiān)測工具保存在/proc目錄下。這里我們將Linux AS 和 SUSE LINUX EnterpriseServer中的命令行及圖形方式下的性能監(jiān)測工具做概括性介紹。
1、uptime
uptime命令用于查看服務(wù)器運行了多長時間以及有多少個用戶登錄,快速獲知服務(wù)器的負荷情況。
uptime的輸出包含一項內(nèi)容是load average,顯示了最近15分鐘的負荷情況。它的值代表等待CPU處理的進程數(shù),如果CPU沒有時間處理這些進程,load average值會升高;反之則會降低。
load average的最佳值是1,說明每個進程都可以馬上處理并且沒有CPU cycles被丟失。對于單CPU的機器,1或者2是可以接受的值;對于多路CPU的機器,load average值可能在8到10之間。
也可以使用uptime命令來判斷網(wǎng)絡(luò)性能。例如,某個網(wǎng)絡(luò)應(yīng)用性能很低,通過運行uptime查看服務(wù)器的負荷是否很高,如果不是,那么問題應(yīng)該是網(wǎng)絡(luò)方面造成的。
下邊是uptime的輸出樣式:
▲
2、dmesg
dmesg命令主要用來顯示內(nèi)核信息。使用dmesg可以有效診斷機器硬件故障或者添加硬件出現(xiàn)的問題。
另外,使用dmesg可以確定您的服務(wù)器安裝了那些硬件。每次系統(tǒng)重啟,系統(tǒng)都會檢查所有硬件并將信息記錄下來。執(zhí)行/bin/dmesg命令可以查看該記錄。
下邊是dmesg的輸出樣式:
▲
3、top
top命令顯示處理器的活動狀況。缺省情況下,顯示占用CPU最多的任務(wù),并且每隔5秒鐘做一次刷新。執(zhí)行該命令后會顯示:Process priority and nice levels
Process priority的數(shù)值決定了CPU處理進程的順序。LIUNX內(nèi)核會根據(jù)需要調(diào)整該數(shù)值的大小。nicevalue局限于priority。priority的值不能低于nice value(nicevalue值越低,優(yōu)先級越高)。您不可以直接修改Process priority的值,但是可以通過調(diào)整nicelevel值來間接地改變Process priority值,然而這一方法并不是所有時候都可用。如果某個進程運行異常的慢,可以通過降低nicelevel為該進程分配更多的CPU。
Linux 支持的 nice levels 由19 (優(yōu)先級低)到-20 (優(yōu)先級高),缺省值為0。執(zhí)行/bin/ps命令可以查看到當前進程的情況。
4、iostat
iostat由Red Hat Enterprise Linux AS發(fā)布。同時iostat也是Sysstat的一部分,可以下載到,網(wǎng)址是http://perso.wanadoo.fr/sebastien.godard/
執(zhí)行iostat命令可以從系統(tǒng)啟動之后的CPU平均時間,類似于uptime。除此之外,iostat還對創(chuàng)建一個服務(wù)器磁盤子系統(tǒng)的活動報告。該報告包含兩部分:CPU使用情況和磁盤使用情況。
下邊是iostat的輸出樣式:
▲
5、vmstat
vmstat提供了processes, memory, paging, block I/O, traps和CPU的活動狀況.
以下是vmstat的輸出樣式:
▲
Process:– r: 等待runtime的進程數(shù)– b: 在不可打斷的休眠狀態(tài)下的進程數(shù)
Memory:– swpd: 虛擬內(nèi)存使用量(KB),– free: 閑置內(nèi)存使用量(KB),– buff: 被當做buffer使用的內(nèi)存量(KB)
Swap:– si: swap到磁盤的內(nèi)存量(KBps),– so: 從磁盤swap出去的內(nèi)存量(KBps)
6 、sar
sar是Red Hat Enterprise Linux AS發(fā)行的一個工具,同時也是Sysstat工具集的命令之一,sar用于收集、報告或者保存系統(tǒng)活動信息。sar由三個應(yīng)用組成:sar顯示數(shù)據(jù)、sar1和sar2用于收集和保存數(shù)據(jù)。
使用sar1和sar2,系統(tǒng)能夠配置成自動抓取信息和日志,以備分析使用。配置舉例:在/etc/crontab中添加如下幾行內(nèi)容:
▲
7 、Traffic-vis
Traffic-vis是一套測定哪些主機在IP網(wǎng)進行通信、通信的目標主機以及傳輸?shù)臄?shù)據(jù)量。并輸出純文本、HTML或者GIF格式的報告。
注:Traffic-vis僅僅適用于SUSE LINUX ENTERPRISE SERVER。
8 、pmap
pmap可以報告某個或多個進程的內(nèi)存使用情況。使用pmap判斷主機中哪個進程因占用過多內(nèi)存導(dǎo)致內(nèi)存瓶頸。
原標題:三招教你預(yù)防服務(wù)器系統(tǒng)中的“盜夢者”
【編輯推薦】