Linux系统性能的远程监控
2014-02-16王中丹
王中丹
Linux系统性能的远程监控
王中丹
(辽宁广播电视大学,110161)
本文介绍通过网络通信的方法,在远程客户端上如何监控Linux主机的性能,通过分析性能数据的趋势,预先发现服务器的性能问题,及早分析并解决问题,保证服务器的正常运行。对于Linux服务器的远程监控,给出了一种解决问题的思路和方法。
服务器;客户端;性能;套接字;监控;守护进程
随着Linux系统的普及,使用Linux系统作为核心服务器的越来越多。但是,对于如何确保Linux服务器的稳定运行,如何实时监视Linux系统的性能,及时发现系统在运行当中的CPU使用率、内存使用量、硬盘剩余空间就显得尤为重要。
以前,Unix和Linux的传统性能监视方法就是操作员在控制台,每隔一定时间手动执行一次性能监控命令,然后,通过手工记录和肉眼确认的方法,确认关键性能指标。这样做的方法是一定要有专人去定时执行相同的命令,同时,需要记录相关的数据,然后,通过人工与前几次记录的数据进行比较,然后,通过大脑分析做出判断。由于是人工操作,容易引起人员的疲劳,发生操作失误,严重的会导致系统宕机,发生严重的事故。而且,只能记录少量数据,无法大量分析历史数据,发现潜在的性能问题等等,人员成本也十分高。这样,如何自动地监视系统的性能,就显得尤为重要。时刻掌握服务器及应用服务的运行状态,是运维工程师们确保服务可用性的一大关键。本文介绍一种自动监视Linux系统性能的方法,供大家参考。
1 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)
2 性能监视服务的软件实现方法
在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分钟启动一次定时器,通过消息队列的方法通知性能数据取得线程,然后取得一次性能数据。
3 数据接收、分析与处理
在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的临床营养实时监控系统结构图
4 总结
将信息化管理应用于临床营养治疗工作中,站在医院管理角度,对医院营养治疗病人进行实时监控,建立全新服务模式,加强营养治疗工作路径管理,实现在院病人的全方位的营养治疗管理,规范营养治疗行为,大大改进营养治疗工作流程,提高工作效率,推动营养治疗质量持续改进。建立在院营养治疗病人的营养风险筛查、治疗对策管理体系。进行适时、适度的营养支持才能使患者最终获益。提高病人疾病治疗效果,提高病人满意度,提高医院社会效益和经济效益。
参考文献
[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