目前的工程需要简单的监测一下Linux系统的:CPU负载、内存消耗情况、几个指定目录的磁盘空间、磁盘I/O、swap的情况还有就是网络流量。
Linux下的性能检测工具其实都有很多。mrtg(http://people.ee.ethz.ch/~oetiker/webtools/mrtg/)就是一个很不错的选择。不过用mrtg就要装sysstat、apache、snmp、perl之类的东西。而且安装也要好几个步骤,似乎比较麻烦。本来也想直接调用sar、vmstat之类的命令,parse一下结果就算了。哪知道发现不同的版本的linux这些命令的结果也都是不一样。既然要按版本parse它们的结果,那还不如直接去系统里面获得算了。于是研究了一下sysstat(http://freshmeat.net/projects/sysstat/ )和gkrellm(http://gkrellm.net )的源代码,找到监测性能的数据所在。
1、CPU
在文件"/proc/stat"里面就包含了CPU的信息。每一个CPU的每一tick用在什么地方都在这个文件里面记着。后面的数字含义分别是:user、nice、sys、idle、iowait。有些版本的kernel没有iowait这一项。这些数值表示从开机到现在,CPU的每tick用在了哪里。例如:cpu0 256279030 0 11832528 1637168262
就是cpu0从开机到现在有256279030 tick用在了user消耗,11832528用在了sys消耗。所以如果想计算单位时间(例如1s)里面CPU的负载,那只需要计算1秒前后数值的差除以每一秒的tick数量就可以了。gkrellm就是这样实现的:((200 * (v2 - v1) / CPU_TICKS_PER_SECOND) + 1) /2
例如,第一次读取/proc/stat,user的值是256279030;一秒以后再读一次,值是256289030,那么CPU在这一秒的user消耗就是:((200 * (256289030 - 256279030) / CPU_TICKS_PER_SECOND) + 1) /2 = ((10000 * 200 / 1000000) + 1) / 2 = 1%了。
2、内存消耗
文件"/proc/meminfo"里面包含的就是内存的信息,还包括了swap的信息。例如:
$ cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 1057009664 851668992 205340672 0 67616768 367820800
Swap: 2146787328 164429824 1982357504
MemTotal: 1032236 kB
MemFree: 200528 kB
MemShared: 0 kB
……
不过从gkrellm的源代码看,有些版本没有前面那两行统计的信息,只能够根据下面的Key: Value这种各式的数据收集。
3、磁盘空间
从gkrellm的源代码看,这个是一个很复杂的数据。磁盘分区的数据有可能分布在:/proc/mounts、/proc/diskstats、/proc/partitions等等。而且如果想要检查某几个特定的路径,还需要通过mount、df等命令的帮助。为了减少麻烦,这个数据我就直接用statfs函数直接获得了。
int statfs(const char *path, struct statfs *buf);
这个函数只需要输入需要检查的路径名称,就可以返回这个路径所在的分区的空间使用情况:
总空间:buf.f_bsize * buf.f_blocks
空余空间:buf.f_bsize * buf.f_bavail
4、磁盘I/O
磁盘I/O的数据也同样比较复杂,有些版本看/proc/diskstats,有些版本看/proc/partitions,还有些版本至今我也不知道在那里看……不过可以看到数据的版本也像CPU那样,需要隔一段时间取值,两次取值的差就是流量。
5、网络流量
网络流量也是五花八门,不过基本上都可以在/proc/net/dev里面获得。同样也是需要两次取值取其差作为流量值。
以上就是数据获得源头。程序也比较好写,不外乎就是打开一些文件,逐行读出来然后用sscanf来parse一下数据就可以了。
分享到:
相关推荐
综上所述,Linux系统性能监测涉及多个内核提供的文件和系统调用,通过解析这些信息,我们可以有效地监控系统状态并进行必要的调整。对于开发自定义监控工具或分析现有工具的工作原理,理解这些底层细节至关重要。
在Linux系统监控中,了解如何获取关键性能指标对于优化系统运行和排查问题至关重要。本文将详细探讨如何通过系统内核暴露的文件和命令来获取CPU负载、内存消耗、磁盘空间、磁盘I/O以及网络流量等信息。 1. **CPU...
在Linux系统中,进行内存性能测试对于评估系统的整体性能至关重要,特别是对于服务器和高负载环境。本文将详细解析一个基于shell脚本的内存性能测试方法,该脚本利用`dd`命令和`/proc/sys/vm/drop_caches`文件进行...
总结来说,这篇文章深入探讨了在Linux环境下如何利用内核模块技术来实现PowerPC-NC系统的性能参数获取。这种方法的实施为系统管理员提供了强大的工具,帮助他们更好地理解和优化基于PowerPC的网络计算机系统。
在Linux系统中,性能数据可以来源于虚拟目录/proc,这个目录中包含了系统运行时的参数。通过这些参数,性能监控工具能够展示当前系统各个子系统的运行状况。当系统发生性能问题时,可以通过修改/proc目录下的相关...
单机Linux性能监测系统(PMS,Standalone Linux Operating System Computer Performance Monitoring System)是一个专门用于实时监控Linux系统资源利用率的工具,尤其关注CPU和内存的使用情况。该系统设计的目的是...
同时,测试结果应多次验证以获取平均值,因为内存性能可能受到系统状态、CPU负载、硬件温度等因素的影响。 总结,DDR带宽测试对于理解Linux系统的性能至关重要,`mbw`是一个实用的工具,能够帮助用户轻松地测量内存...
### Linux下性能测试工具简介 #### 工具1:memtester **功能介绍:** - **定义:** `memtester` 是一个用户空间的内存子系统测试工具,用于检测计算机内存是否存在故障。它可以识别出间歇性和非确定性的内存问题...
Linux性能参数对于优化系统运行效率至关重要,理解和监控这些参数能够帮助我们发现并解决潜在的系统瓶颈。以下将详细探讨Linux中的关键性能指标。 首先,我们要关注的是处理器参数。CPU利用率(CPU utilization)是最...
sysstat是另一个重要的Linux性能监控工具,它包含了一系列子程序,如iostat、mpstat、vmstat等,用于收集和报告系统级别的统计信息,包括CPU利用率、内存使用、磁盘I/O、网络活动等。这些信息对于诊断系统性能问题,...
在本文中,作者彭土有探讨了如何对Linux集群系统进行实时性能监测和可视化,以提升系统的管理和优化能力。研究的核心是利用CGI(Common Gateway Interface)技术和HTTP协议,实现对Linux集群服务器节点性能参数的...
在Linux系统中,测试硬盘性能是一项重要的任务,它可以帮助我们评估磁盘的读写速度、块访问效率以及寻道时间,这些因素直接影响到系统的整体运行速度和响应能力。本文将详细解析一个使用shell脚本来测试硬盘性能的...
这份名为“LINUX性能调优方法总结”的文档,很可能包含了一系列关于如何优化Linux系统性能的技术和策略。以下是根据标题和描述可能涵盖的一些主要知识点: 1. **系统监控工具**:了解并使用如`top`, `htop`, `...
总的来说,本发明提供了一种在Linux系统下利用iperf进行网卡压力测试的有效方法,通过shell脚本的自动化控制,实现了测试参数的灵活设置和测试结果的快速获取,大大提升了测试工作的效率和质量。这对于网络管理员和...
【Linux系统运行时参数命令、网络、磁盘参数和日志监控】 在Linux系统管理中,了解并熟练运用各种命令是至关重要的。本课程重点涵盖了Linux基础命令、系统性能监控,特别是CPU、内存、磁盘I/O以及网络性能的监控。...
总的来说,获取和修改Linux Socket的最大连接数涉及到对系统底层机制的理解,包括Socket的工作原理、文件描述符限制以及内核参数调整等。正确地设置这些参数,可以显著提升服务器的并发处理能力和性能。
2. 性能调优:通过调整内核参数,优化系统的性能和稳定性。 3. 安全性考虑:保持内核和软件包的更新,以修复安全漏洞。 通过以上步骤,你可以成功地将Linux系统移植到ARM平台上。这个过程需要耐心和细心,但一旦...
### 嵌入式Linux系统开发概述 #### 一、嵌入式系统基本概念与特点 **1.1 嵌入式系统定义** 嵌入式系统是指将计算机硬件和软件集成在一个或多个处理器上,形成一个专用的计算机系统,用于实现特定功能的产品或设备...
7. **/proc文件系统**:通过读取/proc下的文件,获取系统及进程的实时信息。 三、调优策略 1. **内核参数调整**:通过调整sysctl参数,优化内核行为,如网络、内存管理等。 2. **文件系统优化**:选择合适的文件...