获取Linux操作系统信息的方法

文档序号:6586195阅读:507来源:国知局
专利名称:获取Linux操作系统信息的方法
技术领域
本发明涉及一种获取Linux操作系统信息的方法,尤其涉及一种获取Linux操作系统基本硬件信息和运行期间系统信息的方法,属于计算机信息采集及处理技术领域。
背景技术
随着信息化程度的不断提高,在企业中的服务器数量会越来越多。如何把这些服务器用好、管好,最大限度地发挥设备的潜能就成为这些服务器的拥有者们所关心的一个重要问题。而管理服务器的首要条件就是必须随时掌握每一台服务器的系统信息,包括基本硬件信息和运行期间系统信息。因此采用一种系统、安全、高效的方法来获取服务器的系统信息是做好服务器管理的重要基础。
Linux操作系统具有性能稳定、开放源代码、成本低廉的特点;越来越多的企业开始使用Linux作为服务器的操作系统。因此对Linux服务器的管理问题也就开始受到人们的关注。
目前,基于Linux操作系统获取服务器系统信息的方法没有提供调用接口,不能满足服务器管理的需求。例如常见的查看系统信息的工具(例如System monitor,System Info,CPU/MEM usage,CPULoad,MemLoad,NetLoad,SwapLoad等)只能监控到服务器的某一个信息点,不能提供给用户一整套系统信息。并且,用户关心的CPU利用率、内存利用率、硬盘即时流量、硬盘温度等信息无法获得和提供。
因此如何从运行Linux操作系统的服务器上获取相应的硬件信息和运行期间的系统信息,已经成为了管理Linux服务器的瓶颈,是管理Linux服务器首先要解决的重要问题。

发明内容
本发明的主要目的在于提供一种获取Linux操作系统信息的方法,通过读取和处理Linux操作系统的内核信息文件,获得运行该LINUX操作系统服务器的完整信息。
本发明的另一目的在于提供一种获取Linux操作系统信息的方法,其可独立于不同的Linux发行版本,而仅仅依靠标准的Linux内核就可以实现服务器信息的获取,实现兼容性。
本发明的目的是这样实现的一种获取Linux操作系统信息的方法,至少包括如下的步骤步骤1通过Linux操作系统的proc文件系统(proc是类UNIX操作系统非常独特的一个目录,它其实是一个映射在内存中的文件系统,称为proc文件系统),读取Linux内核中各模块的信息;步骤2对读出的信息进行处理;步骤3将处理后的信息输出到指定的接口文件。
所述的各模块的信息至少包括静态信息,其以字符串形式表达,至少包括CPU的基本信息、硬盘基本信息、内存基本信息、网卡信息、PCI扩展卡基本信息、光驱基本信息以及操作系统基本信息;该静态信息按原字符串形式直接读出;动态信息,其以数字形式和/或字符串形式表达,至少包括CPU利用率、硬盘输入/输出吞吐率、内存利用率、网络流量。
上面步骤2所述的处理为对读取的动态信息进行计算,获得可以直接读取的动态信息数据。
所述的计算为对CPU利用率的计算,具体为步骤211分两次从proc文件系统中读取由Linux内核输出的CPU时间片数据;步骤212根据该CPU时间片数据,并依据如下公式分别计算CPU运行在用户应用状态和系统状态下的时间的总和及其相对于所有运行时间数的比率;Total1=user1+nice1+sys1+idle1;Total2=user2+nice2+sys2+idle2;Rate={[(user2+sys2)-(user1+sys1)]÷(total2-total1)}×100其中,Total1、Total2分别为第一次和第二次读出的累计总资源数据;user1、user2分别为第一次和第二次读出的用户应用状态下的时间总和数据;nice1、nice2分别为第一次和第二次读出的操作系统在调整进程优先级时所耗费的时间(由于这是操作系统内部的时间消耗,并没有对用户作业产生直接贡献,因此不计入实际消耗的CPU时间片);sys1、sys2分别为第一次和第二次读出的系统状态下的时间总和数据;idle1、idle2分别为第一次和第二次读出的CPU空闲状态的时间(在这段时间中CPU没有进行任何的运算,处于空闲状态,没有对用户作业产生直接贡献,因此不计入实际消耗的CPU时间);Rate为CPU运行在用户应用状态和系统状态下的时间总和相对于所有运行时间数的比率。
所述的计算为对硬盘输入/输出吞吐率的计算,具体为步骤221分两次从proc文件系统中读取由Linux内核输出的硬盘吞吐总量数据;步骤222根据该硬盘吞吐总量数据,并依据如下公式计算硬盘输入/输出吞吐率;A=dk_drive_rblk_t1+dk_drive_wblk_t1;
B=dk_drive_rblk_t2+dk_drive_wblk_t2;disk_iorate=(B-A)÷(T2-T1)其中,dk_drive_rblk_t1为第一次读取的硬盘在系统启动后累计读出的数据块数量;dk_drive_rblk_t2为第二次读取的硬盘在系统启动后累计读出的数据块数量;dk_drive_wblk_t1为第一次读取的硬盘在系统启动后累计写入的数据块数量;dk_drive_wblk_t2为第二次读取的硬盘在系统启动后累计写入的数据块数量;A、B分别为第一次和第二次读取的硬盘在系统启动后的累计吞吐量数据;T1、T2分别为第一次和第二次读取由Linux内核输出的硬盘吞吐总量数据的时间;disk_iorate为硬盘输入/输出吞吐率。
所述的计算为对内存利用率的计算,具体为步骤231从proc文件系统中读取由Linux内核输出的内存信息;步骤232根据该内存信息,并依据如下公式计算内存利用率;mem_userate=(used÷total)×100%;其中,total为系统的物理内存总量;used为已被使用的物理内存量;mem_userate为内存利用率。
所述的计算为对网络流量的计算,具体为步骤241分两次从proc文件系统中读取由Linux内核输出的记录网络打开以后累计流量的原始数据;步骤242根据该累计流量的原始数据,并依据如下公式计算网络设备的平均网络流量;A=Receive_byte_t1+Transmit_byte_t1;B=Receive_byte_t2+Transmit_byte_t2;net_flux=[B-A]÷(t2-t1);其中,A、B分别为第一次和第二次读取的累计流量的原始数据;Receive-byte_t1为第一次读取的网络设备的累计接收字节数;Transmit_byte_t1为第一次读取的网络设备的累计发送字节数;Receive_byte_t2为第二次读取的网络设备的累计接收字节数;Transmit_byte_t2为第二次读取的网络设备的累计发送字节数;net_flux为平均网络流量;t1、t2分别为第一次和第二次读取由Linux内核输出的累计流量的原始数据的时间。
所述的硬盘为一个或一个以上;所述的网络设备为一个或一个以上。
本发明通过读取和处理Linux操作系统\proc目录下的内核信息文件,获得运行该LINUX操作系统服务器的完整信息,并可独立于不同的Linux发行版本,而仅仅依靠标准的Linux内核就可以实现服务器信息的获取,具有广泛的兼容性。


图1为本发明Linux服务器的系统信息的总体原理框图。
图2为本发明获取Linux服务器的系统信息的流程示意图。
图3为本发明Linux服务器系统信息汇集的流程示意图。
具体实施例方式以下结合附图和具体的实施例对本发明作进一步的详细说明参见图1、图2、图3和表1,其为本发明可以获得Linux服务器的系统信息。
表1

上述表1中的信息,可以通过读取和处理/proc目录下的内核信息文件,并进行一定的处理得到。
/proc是类UNIX操作系统非常独特的一个目录,它其实是一个映射在内存中的文件系统,称为proc文件系统。这个文件系统中主要包含的是Linux内核向用户空间开放的内核信息,并且用户可以通过修改其中某些文件的内容在线对Linux内核进行配置。
proc文件系统是由Linux操作系统内核提供的标准接口,所有的Linux操作系统都以目录/proc的形式向用户空间开放proc文件系统。因此,从这个文件系统获取信息可以独立于不同的Linux发行版本,而仅仅依靠标准的官方Linux内核,这样可以简化兼容性问题。
本发明所涉及的获取系统信息的方法充分利用了proc文件系统的特点,可以独立于操作系统的其它服务,紧紧依靠Linux操作系统的内核就获得众多的操作系统信息。作为补充,也可以使用一些驱动程序提供的接口以获得诸如网卡连接速度、通断状态和RAID卡的信息。
参见图2和图3,本发明要从中获取信息的文件为从/proc/cpuinfo文件中获取CPU的信息,从/proc/meminfo文件中获取内存信息,从/proc/ioports文件中获取输入/输出端口信息,从/proc/partitions文件中获取硬盘分区信息,从/proc/stat文件中获取内核重要数据统计信息,从/proc/version文件中获取操作系统版本信息,从/proc/ide/文件中获取IDE(智能磁盘设备接口,Interface DeviceElectronic)块设备信息;从/proc/scsi文件中获取SCSI(小型计算机系统接口,Small Computer System Interface)块设备信息。
实施例1参见图2,通过读取以上文件或目录,就可以获得Linux操作系统信息。有些信息需要对采集到的数据进行一些特殊的处理才可以得到实际需要的系统信息,最具代表性的是CPU利用率信息从/proc/stat中可以读取到CPU在user,nice,sys,idle四种状态下运行的时间数据,要计算CPU利用率就要看CPU运行在user和sys两种状态中时间的总和占所有运行时间数的比率。
对这个文件需要读取两遍,用total表示累计总资源,那么user+sys就是想要知道的累计CPU占用的资源。每个变量后面的数字表示它是第几次读文件得到的,用如下方法可算出CPU占用率Total_1=user_1+nice_1+sys_1+idle_1Total_2=user_2+nice_2+sys_2+idle_2Rate=([(user_2+sys_2)-(user_1+sys_1)]/(total_2-total_1)}*100%
其中,Total1、Total2分别为第一次和第二次读出的累计总资源数据;user1、user2分别为第一次和第二次读出的用户应用状态下的时间总和数据;nice1、nice2分别为第一次和第二次读出的操作系统在调整进程优先级时所耗费的时间;sys1、sys2分别为第一次和第二次读出的系统状态下的时间总和数据;idle1、idle2分别为第一次和第二次读出的CPU空闲状态的时间;Rate为CPU运行在用户应用状态和系统状态下的时间总和相对于所有运行时间数的比率。
在上述的实施例中,由于两次读取的时间间隔比较短,因此可以近似地认为这就是即时的CPU利用率。
实施例2硬盘输入/输出吞吐率的获取。
参见图2,硬盘输入/输出吞吐率即是硬盘在较短时间内平均每秒的吞吐流量,本实施例中以字节为单位进行统计。在/proc文件系统的/proc/stat文件中保存有Linux的每一个硬盘吞吐总量的信息,并且,在/proc/stat文件中具体为以字符串“disk_io”开头的那一行。如果一台计算机的Linux系统中的/proc/stat文件中,该统计硬盘流量的一行显示信息如下disk_io(3,0)(42945,39452,300042,3493,48176)则在后一对括号中的5个数字在Linux内核中的解释为(dk_drive,dk_drive_rio,dk_drive_rblk,dk_drive_wio,dk_drive_wblk);其中,dk_drive_rblk是该硬盘在系统启动后累计读取的数据块(512Byte);dk_drive_wblk是该硬盘在系统启动后累计写入的数据块(512Byte),因此所以只要解析k_drive_rblk和dk_drive_wblk字段即可获得硬盘吞吐率。具体的处理和计算的方法为首先确定一个时间t1,然后读取t1时刻的dk_drive_rblk_t1(硬盘在系统启动后累计读取的数据块)和dk_drive_wblk_t1(硬盘在系统启动后累计写入的数据块);然后,再确定一个时间t2,并且读取t2时刻的dk_drive_rblk_t2(硬盘在系统启动后累计读取的数据块)和dk_drive_wblk_t2(硬盘在系统启动后累计写入的数据块)。只要t1和t2两个时刻间隔较短,按照如下公式计算硬盘输入/输出吞吐率disk_iorateA=dk_drive_rblk_t1+dk_drive_wblk_t1;B=dk_drive_rblk_t2+dk_drive_wblk_t2;disk_iorate=(B-A)÷(T2-T1)其中,dk_drive_rblk_t1为在t1时刻读取的硬盘在系统启动后累计读出的数据块数量;dk_drive_rblk_t2为在t2时刻的硬盘在系统启动后累计读出的数据块数量;dk_drive_wblk_t1为在t1时刻的硬盘在系统启动后累计写入的数据块数量;dk_drive_wblk_t2为在t2时刻的硬盘在系统启动后累计写入的数据块数量;A、B分别为在t1时刻和t2时刻读取的硬盘在系统启动后的累计吞吐量数据;T1、T2分别为在t1时刻和t2时刻读取由Linux内核输出的硬盘吞吐总量数据的时间;disk_iorate为硬盘输入/输出吞吐率。
因为,本实施例中,读出来的输入/输出吞吐率以数据块(512Byte)为单位的,因此如果要得到以Kbyte为单位的吞吐率,还需要将disk_iorate除以2,这样,就得到了以Kbyte为单位的硬盘输入/输出吞吐率。
实施例3内存利用率的获取参见图2,内存利用率的获取相对简单。从/proc/meminfo文件中,可以获得系统物理内存的使用情况。例如假定从/proc/meminfo文件中读取到如表2信息表2

其中,total下面对应的就是系统的物理内存总量,为261984256Byte,而used为已被使用的物理内存量为258281472Byte,因此内存利用率就是(258281472/261984256)×100%=98.6%所以,从/proc/meminfo中读取内存使用情况的相关信息可以按照如下公式计算系统的内存利用率mem_userate=(used/total)×100%;mem_userate为内存利用率。
实施例4获取网络流量参见图2,获取网络流量的信息需要从/proc/net/dev文件中读取记录网络打开以后累计流量的原始数据,然后进行计算。例如从/proc/net/dev中关于网络流量的信息为

其中,Receive对应的bytes为网络启动以后网络设备累计接收的字节数;Transmit对应的bytes为网络启动以后网络设备累计发送的字节数。
具体的处理和计算的方法为首先确定一个时间t1,然后读取网络启动以后t1时刻的网络设备累计接收的字节数Receive-byte_t1和网络启动以后t1时刻的网络设备发送的字节数、Transmit-byte_t1;(二者之和就是t1时刻的累计流量);然后再确定一个时间t2,然后读取网络启动以后t2时刻的网络设备累计接收的字节数Receive_byte_t2和网络启动以后t2时刻的网络设备发送的字节数、Transmit_byte_t2;(二者之和就是t2时刻的累计流量);按照如下公式计算网络设备的平均网络流量A=Receive_byte_t1+Transmit_byte_t1;B=Receive_byte_t2+Transmit_byte_t2;net_flux=[B-A]÷(t2-t1);其中,A、B分别为第一次和第二次读取的累计流量的原始数据;Receive_byte_t1为第一次读取的网络设备的累计接收字节数;Transmit_byte_t1为第一次读取的网络设备的累计发送字节数;Receive_byte_t2为第二次读取的网络设备的累计接收字节数;Transmit_byte_t2为第二次读取的网络设备的累计发送字节数;net_flux为平均网络流量;t1、t2分别为第一次和第二次读取由Linux内核输出的累计流量的原始数据的时间。
以上实施例仅用以说明而非限制本发明所涉及的技术方案,尽管参照以上较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,本发明的技术方案可以进行修改、变形或者等同替换;而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围之中。
权利要求
1.一种获取Linux操作系统信息的方法,其特征在于它至少包括如下的步骤步骤1通过Linux操作系统的proc文件系统,读取Linux内核中各模块的信息;步骤2对读出的信息进行处理;步骤3将处理后的信息输出到指定的接口文件。
2.根据权利要求1所述的获取Linux操作系统信息的方法,其特征在于所述的各模块的信息至少包括静态信息,其以字符串形式表达,至少包括CPU的基本信息、硬盘基本信息、内存基本信息、网卡信息、PCI扩展卡基本信息、光驱基本信息以及操作系统基本信息;该静态信息按原字符串形式直接读出;动态信息,其以数字形式和/或字符串形式表达,至少包括CPU利用率、硬盘输入/输出吞吐率、内存利用率、网络流量。
3.根据权利要求1或2所述的获取Linux操作系统信息的方法,其特征在于步骤2所述的处理为对读取的动态信息进行计算,获得可以直接读取的动态信息数据。
4.根据权利要求3所述的获取Linux操作系统信息的方法,其特征在于所述的计算为对CPU利用率的计算,具体为步骤211分两次从proc文件系统中读取由Linux内核输出的CPU时间片数据;步骤212根据该CPU时间片数据,并依据如下公式分别计算CPU运行在用户应用状态和系统状态下的时间的总和及其相对于所有运行时间数的比率;Total1=user1+nice1+sys1+idle1;Total2=user2+nice2+svs2+idle2;Rate={[(user2+sys2)-(user1+sys1)]÷(total2-total1)}×100其中,Total1、Total2分别为第一次和第二次读出的累计总资源数据;user1、user2分别为第一次和第二次读出的用户应用状态下的时间总和数据;nice1、nice2分别为第一次和第二次读出的操作系统在调整进程优先级时所耗费的时间;sys1、sys2分别为第一次和第二次读出的系统状态下的时间总和数据;idle1、idle2分别为第一次和第二次读出的CPU空闲状态的时间;Rate为CPU运行在用户应用状态和系统状态下的时间总和相对于所有运行时间数的比率。
5.根据权利要求3所述的获取Linux操作系统信息的方法,其特征在于所述的计算为对硬盘输入/输出吞吐率的计算,具体为步骤221分两次从proc文件系统中读取由Linux内核输出的硬盘吞吐总量数据;步骤222根据该硬盘吞吐总量数据,并依据如下公式计算硬盘输入/输出吞吐率;A=dk_drive_rblk_t1+dk_drive_wblk_t1;B=dk_drive_rblk_t2+dk_drive_wblk_t2;disk_iorate=(B-A)÷(T2-T1)其中,dk_drive_rblk_t1为第一次读取的硬盘在系统启动后累计读出的数据块数量;dk_drive_rblk_t2为第二次读取的硬盘在系统启动后累计读出的数据块数量;dk_drive_wblk_t1为第一次读取的硬盘在系统启动后累计写入的数据块数量;dk_drive_wblk_t2为第二次读取的硬盘在系统启动后累计写入的数据块数量;A、B分别为第一次和第二次读取的硬盘在系统启动后的累计吞吐量数据;T1、T2分别为第一次和第二次读取由Linux内核输出的硬盘吞吐总量数据的时间;disk_iorate为硬盘输入/输出吞吐率。
6.根据权利要求3所述的获取Linux操作系统信息的方法,其特征在于所述的计算为对内存利用率的计算,具体为步骤231从proc文件系统中读取由Linux内核输出的内存信息;步骤232根据该内存信息,并依据如下公式计算内存利用率;mem_userate=(used÷total)×100%;其中,total为系统的物理内存总量;used为已被使用的物理内存量;mem_userate为内存利用率。
7.根据权利要求3所述的获取Linux操作系统信息的方法,其特征在于所述的计算为对网络流量的计算,具体为步骤241分两次从proc文件系统中读取由Linux内核输出的记录网络打开以后累计流量的原始数据;步骤242根据该累计流量的原始数据,并依据如下公式计算网络设备的平均网络流量;A=Receive_byte_t1+Transmit_byte_t1;B=Receive_byte_t2+Transmit_byte_t2;net_flux=[B-A]÷(t2-t1);其中,A、B分别为第一次和第二次读取的累计流量的原始数据;Receive_byte_t1为第一次读取的网络设备的累计接收字节数;Transmit_byte_t1为第一次读取的网络设备的累计发送字节数;Receive_byte_t2为第二次读取的网络设备的累计接收字节数;Transmit_byte_t2为第二次读取的网络设备的累计发送字节数;net_flux为平均网络流量;t1、t2分别为第一次和第二次读取由Linux内核输出的累计流量的原始数据的时间。
8.根据权利要求5所述的获取Linux操作系统信息的方法,其特征在于所述的硬盘为一个或一个以上。
9.根据权利要求7所述的获取Linux操作系统信息的方法,其特征在于所述的网络设备为一个或一个以上。
全文摘要
一种获取Linux操作系统信息的方法,通过Linux操作系统的proc文件系统,读取Linux内核中各模块的信息;对读出的信息进行处理;将处理后的信息输出到指定的接口文件。本发明通过读取和处理Linux操作系统\proc目录下的内核信息文件,获得运行该LINUX操作系统服务器的完整信息,并可独立于不同的Linux发行版本,而仅仅依靠标准的Linux内核就可以实现服务器信息的获取,具有广泛的兼容性。
文档编号G06F17/40GK1480878SQ0212933
公开日2004年3月10日 申请日期2002年9月2日 优先权日2002年9月2日
发明者周健, 李勇, 周谧, 席振新, 王晟, 谈华芳, 郜远, 陈光亮, 王洪武, 周 健 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1