王中丹
Linux系統(tǒng)性能的遠(yuǎn)程監(jiān)控
王中丹
(遼寧廣播電視大學(xué),110161)
本文介紹通過網(wǎng)絡(luò)通信的方法,在遠(yuǎn)程客戶端上如何監(jiān)控Linux主機的性能,通過分析性能數(shù)據(jù)的趨勢,預(yù)先發(fā)現(xiàn)服務(wù)器的性能問題,及早分析并解決問題,保證服務(wù)器的正常運行。對于Linux服務(wù)器的遠(yuǎn)程監(jiān)控,給出了一種解決問題的思路和方法。
服務(wù)器;客戶端;性能;套接字;監(jiān)控;守護進程
隨著Linux系統(tǒng)的普及,使用Linux系統(tǒng)作為核心服務(wù)器的越來越多。但是,對于如何確保Linux服務(wù)器的穩(wěn)定運行,如何實時監(jiān)視Linux系統(tǒng)的性能,及時發(fā)現(xiàn)系統(tǒng)在運行當(dāng)中的CPU使用率、內(nèi)存使用量、硬盤剩余空間就顯得尤為重要。
以前,Unix和Linux的傳統(tǒng)性能監(jiān)視方法就是操作員在控制臺,每隔一定時間手動執(zhí)行一次性能監(jiān)控命令,然后,通過手工記錄和肉眼確認(rèn)的方法,確認(rèn)關(guān)鍵性能指標(biāo)。這樣做的方法是一定要有專人去定時執(zhí)行相同的命令,同時,需要記錄相關(guān)的數(shù)據(jù),然后,通過人工與前幾次記錄的數(shù)據(jù)進行比較,然后,通過大腦分析做出判斷。由于是人工操作,容易引起人員的疲勞,發(fā)生操作失誤,嚴(yán)重的會導(dǎo)致系統(tǒng)宕機,發(fā)生嚴(yán)重的事故。而且,只能記錄少量數(shù)據(jù),無法大量分析歷史數(shù)據(jù),發(fā)現(xiàn)潛在的性能問題等等,人員成本也十分高。這樣,如何自動地監(jiān)視系統(tǒng)的性能,就顯得尤為重要。時刻掌握服務(wù)器及應(yīng)用服務(wù)的運行狀態(tài),是運維工程師們確保服務(wù)可用性的一大關(guān)鍵。本文介紹一種自動監(jiān)視Linux系統(tǒng)性能的方法,供大家參考。
(1)使用free命令,查看Linux內(nèi)存的使用情況,如下為free命令取得的數(shù)據(jù)
total,物理內(nèi)存總量;userd,分配給緩存(buffers&cache)的總量,可能部分緩存未被使用;free,未被分配的總量;shared,一般不用,大部分為0;buffers,系統(tǒng)分配但未被使用的buffers;cache,系統(tǒng)分配但未被使用的cache;-/+ buffers/cache那一行:used,實際使用的內(nèi)存量,包括實際使用的buffers&cache;free,當(dāng)前可用的內(nèi)存量,是未被使用和未被分配的buffers&cache。Linux,只要不用swap的交換空間,就不用擔(dān)心自己的內(nèi)存太少。如果常常swap用很多,可能你就要考慮增加物理內(nèi)存了。這也是linux看內(nèi)存是否夠用的標(biāo)準(zhǔn)。
(2)vmstat命令也是顯示Linux性能指標(biāo)的方法,它報告了許多信息,理解這些信息有一定難度。輸出分為6個類別:進程、內(nèi)存、交換區(qū)、I/O、系統(tǒng)和CPU。與iostat類似,第一個樣本是從最近重新啟動以來的平均值。以下是一個典型的vmstat輸出:
對于每一個CPU來說運行隊列不要超過3,例如,如果是雙核CPU就不要超過6;如果CPU在滿負(fù)荷運行,應(yīng)該符合下列分布,a) User Time:65%~70%;b) System Time:30%~35%;c) Idle:0%~5%
(3)top命令是Linux系統(tǒng)管理的一個主要命令,通過它可以獲得許多信息。
# top -b -n1
top - 12:28:33 up 10:53, 1 user, load average: 0.94, 0.55, 0.26
Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us,3.5%sy,0.1%ni, 90.0%id,6.2%wa,0.0%hi ,0.0%si,0.0%st
Mem:1371588k total,453404k used,918184k free,112508k buffers
Swap:204792k total,0k used,204792k free,223028k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 2012 772 560 S 0.0 0.1 0:01.60 init
…… … … … … … … ……… … … … … … … …
前五行是系統(tǒng)整體的統(tǒng)計信息。第一行是任務(wù)隊列信息,同uptime 命令的執(zhí)行結(jié)果;第二、三行為進程和CPU的信息,當(dāng)有多個CPU時,這些內(nèi)容可能會超過兩行;最后兩行為內(nèi)存信息。可以通過轉(zhuǎn)向符的方法將結(jié)果輸出到文件當(dāng)中,然后,通過程序進行解析,各個字段。
# top -b -n1 >/tmp/top.log
如上介紹的是通過命令行如何取得Linux的性能參數(shù),實際上需要通過程序的方法自動取得性能數(shù)據(jù)。實現(xiàn)方法使用system函數(shù)來將數(shù)據(jù)取到文件當(dāng)中。
Free命令取得的性能數(shù)據(jù)的方法:system(free -m > / tmp/free_file.csv)
vsmstat命令取得的性能數(shù)據(jù)的方法:system(vsmstat > /tmp/vsmstat_file.csv)
top命令取得的性能數(shù)據(jù)的方法:system(top -b -n1 > /tmp/top_file.csv)
在Linux服務(wù)器上啟動一個服務(wù),該服務(wù)開設(shè)一個Socket通信服務(wù)端口,接收來自性能監(jiān)視客戶端(Windows客戶端)的連接請求。同時,在該服務(wù)器當(dāng)中要啟動若干個線程,每個線程完成一種單純的功能,各個線程之間協(xié)調(diào)工作,最后,完成定時收集服務(wù)器的性能數(shù)據(jù),并將性能數(shù)據(jù)發(fā)送到性能監(jiān)視客戶端。這樣,服務(wù)器端的功能就完成了,剩下的性能分析工作,全部交給性能監(jiān)視客戶端來完成。
Linux服務(wù)器啟動以后,有一個自動執(zhí)行腳本,假設(shè)性能監(jiān)視服務(wù)的可執(zhí)行程序名為PerforM,在/etc/rc.local腳本的最下面追加一行/home/Perform/PerforM即可。這樣當(dāng)Linux服務(wù)器正常啟動以后,就將性能監(jiān)控服務(wù)PerforM作為一個后臺進程來啟動,也稱為一個守護進程。主進程包括如下線程:(1)客戶端連接偵聽線程(2)性能監(jiān)視數(shù)據(jù)取得線程;(3)數(shù)據(jù)發(fā)送線程;(4)歷史數(shù)據(jù)維護線程;(5)定時器,定時器的時間間隔可以通過配置文件來設(shè)定,主要目的是每隔一段時間觸發(fā)一次性能數(shù)據(jù)收集線程,執(zhí)行一次性能數(shù)據(jù)收集。各個線程的功能如下:
2.1 主線程
2.2 偵聽線程
void *ListenThread (void *p),用來偵聽是否有管理客戶端的連接,當(dāng)檢測到客戶端的連接以后,就建立一個與客戶端的Socekt的連接。
2.3 性能監(jiān)視數(shù)據(jù)取得線程
void *GetData (void *p),該線程通過定時器觸發(fā),每隔一定的時間取得一次Linux服務(wù)器的性能數(shù)據(jù),主要包括:CPU使用率、內(nèi)存使用量、硬盤剩余空間等。取得以后,連同時間戳,以csv的格式保存在文件當(dāng)中。
2.4 數(shù)據(jù)發(fā)送線程
void * AutoReSend (void *p),將取得的性能數(shù)據(jù)通過Socket通信端口發(fā)送到管理客戶端,對于剛連接上來的情況下,要判斷是否有歷史數(shù)據(jù)沒有發(fā)送,沒有發(fā)送的情況下,要先將歷史數(shù)據(jù)發(fā)送給客戶端。然后,再將實時取得的性能數(shù)據(jù)定時發(fā)送給管理客戶端。
2.5 歷史數(shù)據(jù)維護線程
void * DataMentenance (void *p),服務(wù)器每隔一定時間就會自動取得性能數(shù)據(jù),該維護線程每隔一定時間去檢測數(shù)據(jù)文件的日期,超過一定時間以后(比方一個星期或設(shè)定的日期),就自動刪除該性能數(shù)據(jù)文件。這樣不至于性能數(shù)據(jù)文件占用太多的磁盤空間。
2.6 定時器的設(shè)定與啟動
上述定時器,設(shè)定定時時間為5分鐘。當(dāng)然,可以根據(jù)實際情況進行調(diào)整。系統(tǒng)每隔5分鐘啟動一次定時器,通過消息隊列的方法通知性能數(shù)據(jù)取得線程,然后取得一次性能數(shù)據(jù)。
在Windows客戶端上通過程序的方法如何實現(xiàn)自動接收Linux服務(wù)器上的性能監(jiān)控數(shù)據(jù),并且,如何分析服務(wù)器的性能。在客戶端與服務(wù)器建立Socket連接以后,接收線程一直處于接收等待的狀態(tài),當(dāng)有性能數(shù)據(jù)接收到以后,首先,按照時間順序?qū)?shù)據(jù)寫到文件當(dāng)中,然后,通過另外一個分析程序?qū)π阅苓M行分析。當(dāng)出現(xiàn)性能問題時,通過報警系統(tǒng)通知系統(tǒng)管理員。
fd = socket(AF_INET, SOCK_STREAM, 0); //建立套接口
rtval = connect(fd, (struct sockaddr *)&address, address_len); //聯(lián)接
ret = pthread_create(&id0, NULL, recvMsg, (void *) fd);
對于客戶端的有關(guān)性能參數(shù)的展示來講,可以通過C++語言來實現(xiàn),也可以通過常用的C#語言來實現(xiàn)。展現(xiàn)形式可以通過表格的方式,也可以通過圖表的方式來實現(xiàn)。連接的服務(wù)器的端口號可以定位60000以上。
[1]《Linux程序設(shè)計》Neil Matthew、Richard Stons著.陳健、宋健健譯.人民郵電出版社
[2] 《嵌入式Linux應(yīng)用程序開發(fā)》標(biāo)準(zhǔn)教程.華清遠(yuǎn)見嵌入式培訓(xùn)中心.人民郵電出版社
[3]《Linux運維趨勢》 2010年9月 第0期
圖4 基于SSH2的臨床營養(yǎng)實時監(jiān)控系統(tǒng)結(jié)構(gòu)圖
將信息化管理應(yīng)用于臨床營養(yǎng)治療工作中,站在醫(yī)院管理角度,對醫(yī)院營養(yǎng)治療病人進行實時監(jiān)控,建立全新服務(wù)模式,加強營養(yǎng)治療工作路徑管理,實現(xiàn)在院病人的全方位的營養(yǎng)治療管理,規(guī)范營養(yǎng)治療行為,大大改進營養(yǎng)治療工作流程,提高工作效率,推動營養(yǎng)治療質(zhì)量持續(xù)改進。建立在院營養(yǎng)治療病人的營養(yǎng)風(fēng)險篩查、治療對策管理體系。進行適時、適度的營養(yǎng)支持才能使患者最終獲益。提高病人疾病治療效果,提高病人滿意度,提高醫(yī)院社會效益和經(jīng)濟效益。
參考文獻
[1] Norman K.PichardC,Lochs H,et al.Prognostic impact of disease-related malnutrition[J].clin Nutr,2008,27(1):5一15.
[2] 吳國豪.當(dāng)代臨床營養(yǎng)治療的挑戰(zhàn)與機遇[J],中國實用外科雜志.2012,32(2): 104一106.
[3] 王艷.蔣朱明.Marie T,等.營養(yǎng)風(fēng)險的概念分析[J],中華臨床營養(yǎng)雜志.2009 17(2):104一106 .
Remote monitoring of the performance of the Linux system
Wang Zhongdan
(Liaoning Radio & TV University,110161)
This paper introduces the methods of network communication, how performance monitoring Linux host to the remote client,through the performance analysis of trends in the data server,performance problems found in advance,to analyze and solve problems,to ensure the normal operation of the server.For the remote Linux server,gives a method to solve the problem.
Server;Client;Performance;Socket;Monitor;daemon