王中丹
Linux系統性能的遠程監控
王中丹
(遼寧廣播電視大學,110161)
本文介紹通過網絡通信的方法,在遠程客戶端上如何監控Linux主機的性能,通過分析性能數據的趨勢,預先發現服務器的性能問題,及早分析并解決問題,保證服務器的正常運行。對于Linux服務器的遠程監控,給出了一種解決問題的思路和方法。
服務器;客戶端;性能;套接字;監控;守護進程
隨著Linux系統的普及,使用Linux系統作為核心服務器的越來越多。但是,對于如何確保Linux服務器的穩定運行,如何實時監視Linux系統的性能,及時發現系統在運行當中的CPU使用率、內存使用量、硬盤剩余空間就顯得尤為重要。
以前,Unix和Linux的傳統性能監視方法就是操作員在控制臺,每隔一定時間手動執行一次性能監控命令,然后,通過手工記錄和肉眼確認的方法,確認關鍵性能指標。這樣做的方法是一定要有專人去定時執行相同的命令,同時,需要記錄相關的數據,然后,通過人工與前幾次記錄的數據進行比較,然后,通過大腦分析做出判斷。由于是人工操作,容易引起人員的疲勞,發生操作失誤,嚴重的會導致系統宕機,發生嚴重的事故。而且,只能記錄少量數據,無法大量分析歷史數據,發現潛在的性能問題等等,人員成本也十分高。這樣,如何自動地監視系統的性能,就顯得尤為重要。時刻掌握服務器及應用服務的運行狀態,是運維工程師們確保服務可用性的一大關鍵。本文介紹一種自動監視Linux系統性能的方法,供大家參考。
(1)使用free命令,查看Linux內存的使用情況,如下為free命令取得的數據

total,物理內存總量;userd,分配給緩存(buffers&cache)的總量,可能部分緩存未被使用;free,未被分配的總量;shared,一般不用,大部分為0;buffers,系統分配但未被使用的buffers;cache,系統分配但未被使用的cache;-/+ buffers/cache那一行:used,實際使用的內存量,包括實際使用的buffers&cache;free,當前可用的內存量,是未被使用和未被分配的buffers&cache。Linux,只要不用swap的交換空間,就不用擔心自己的內存太少。如果常常swap用很多,可能你就要考慮增加物理內存了。這也是linux看內存是否夠用的標準。
(2)vmstat命令也是顯示Linux性能指標的方法,它報告了許多信息,理解這些信息有一定難度。輸出分為6個類別:進程、內存、交換區、I/O、系統和CPU。與iostat類似,第一個樣本是從最近重新啟動以來的平均值。以下是一個典型的vmstat輸出:

對于每一個CPU來說運行隊列不要超過3,例如,如果是雙核CPU就不要超過6;如果CPU在滿負荷運行,應該符合下列分布,a) User Time:65%~70%;b) System Time:30%~35%;c) Idle:0%~5%
(3)top命令是Linux系統管理的一個主要命令,通過它可以獲得許多信息。
# 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
…… … … … … … … ……… … … … … … … …
前五行是系統整體的統計信息。第一行是任務隊列信息,同uptime 命令的執行結果;第二、三行為進程和CPU的信息,當有多個CPU時,這些內容可能會超過兩行;最后兩行為內存信息。可以通過轉向符的方法將結果輸出到文件當中,然后,通過程序進行解析,各個字段。
# top -b -n1 >/tmp/top.log
如上介紹的是通過命令行如何取得Linux的性能參數,實際上需要通過程序的方法自動取得性能數據。實現方法使用system函數來將數據取到文件當中。
Free命令取得的性能數據的方法:system(free -m > / tmp/free_file.csv)
vsmstat命令取得的性能數據的方法:system(vsmstat > /tmp/vsmstat_file.csv)
top命令取得的性能數據的方法:system(top -b -n1 > /tmp/top_file.csv)
在Linux服務器上啟動一個服務,該服務開設一個Socket通信服務端口,接收來自性能監視客戶端(Windows客戶端)的連接請求。同時,在該服務器當中要啟動若干個線程,每個線程完成一種單純的功能,各個線程之間協調工作,最后,完成定時收集服務器的性能數據,并將性能數據發送到性能監視客戶端。這樣,服務器端的功能就完成了,剩下的性能分析工作,全部交給性能監視客戶端來完成。
Linux服務器啟動以后,有一個自動執行腳本,假設性能監視服務的可執行程序名為PerforM,在/etc/rc.local腳本的最下面追加一行/home/Perform/PerforM即可。這樣當Linux服務器正常啟動以后,就將性能監控服務PerforM作為一個后臺進程來啟動,也稱為一個守護進程。主進程包括如下線程:(1)客戶端連接偵聽線程(2)性能監視數據取得線程;(3)數據發送線程;(4)歷史數據維護線程;(5)定時器,定時器的時間間隔可以通過配置文件來設定,主要目的是每隔一段時間觸發一次性能數據收集線程,執行一次性能數據收集。各個線程的功能如下:
2.1 主線程

2.2 偵聽線程
void *ListenThread (void *p),用來偵聽是否有管理客戶端的連接,當檢測到客戶端的連接以后,就建立一個與客戶端的Socekt的連接。
2.3 性能監視數據取得線程
void *GetData (void *p),該線程通過定時器觸發,每隔一定的時間取得一次Linux服務器的性能數據,主要包括:CPU使用率、內存使用量、硬盤剩余空間等。取得以后,連同時間戳,以csv的格式保存在文件當中。
2.4 數據發送線程
void * AutoReSend (void *p),將取得的性能數據通過Socket通信端口發送到管理客戶端,對于剛連接上來的情況下,要判斷是否有歷史數據沒有發送,沒有發送的情況下,要先將歷史數據發送給客戶端。然后,再將實時取得的性能數據定時發送給管理客戶端。
2.5 歷史數據維護線程
void * DataMentenance (void *p),服務器每隔一定時間就會自動取得性能數據,該維護線程每隔一定時間去檢測數據文件的日期,超過一定時間以后(比方一個星期或設定的日期),就自動刪除該性能數據文件。這樣不至于性能數據文件占用太多的磁盤空間。
2.6 定時器的設定與啟動

上述定時器,設定定時時間為5分鐘。當然,可以根據實際情況進行調整。系統每隔5分鐘啟動一次定時器,通過消息隊列的方法通知性能數據取得線程,然后取得一次性能數據。
在Windows客戶端上通過程序的方法如何實現自動接收Linux服務器上的性能監控數據,并且,如何分析服務器的性能。在客戶端與服務器建立Socket連接以后,接收線程一直處于接收等待的狀態,當有性能數據接收到以后,首先,按照時間順序將數據寫到文件當中,然后,通過另外一個分析程序對性能進行分析。當出現性能問題時,通過報警系統通知系統管理員。
fd = socket(AF_INET, SOCK_STREAM, 0); //建立套接口
rtval = connect(fd, (struct sockaddr *)&address, address_len); //聯接
ret = pthread_create(&id0, NULL, recvMsg, (void *) fd);
對于客戶端的有關性能參數的展示來講,可以通過C++語言來實現,也可以通過常用的C#語言來實現。展現形式可以通過表格的方式,也可以通過圖表的方式來實現。連接的服務器的端口號可以定位60000以上。
[1]《Linux程序設計》Neil Matthew、Richard Stons著.陳健、宋健健譯.人民郵電出版社
[2] 《嵌入式Linux應用程序開發》標準教程.華清遠見嵌入式培訓中心.人民郵電出版社
[3]《Linux運維趨勢》 2010年9月 第0期

圖4 基于SSH2的臨床營養實時監控系統結構圖
將信息化管理應用于臨床營養治療工作中,站在醫院管理角度,對醫院營養治療病人進行實時監控,建立全新服務模式,加強營養治療工作路徑管理,實現在院病人的全方位的營養治療管理,規范營養治療行為,大大改進營養治療工作流程,提高工作效率,推動營養治療質量持續改進。建立在院營養治療病人的營養風險篩查、治療對策管理體系。進行適時、適度的營養支持才能使患者最終獲益。提高病人疾病治療效果,提高病人滿意度,提高醫院社會效益和經濟效益。
參考文獻
[1] Norman K.PichardC,Lochs H,et al.Prognostic impact of disease-related malnutrition[J].clin Nutr,2008,27(1):5一15.
[2] 吳國豪.當代臨床營養治療的挑戰與機遇[J],中國實用外科雜志.2012,32(2): 104一106.
[3] 王艷.蔣朱明.Marie T,等.營養風險的概念分析[J],中華臨床營養雜志.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