热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HostMonitor监控Windows和Linux的内存空闲率

HostMonitor官方网站:http:www.ks-soft.netHostMonitor是一款非常出色的服务端监控程序

HostMonitor 官方网站:http://www.ks-soft.net/  

 HostMonitor 是一款非常出色的服务端监控程序。可以监控任何 TCP service、 ping主机、检查内存使用情况、检查可用磁盘空间, 具有良好的可扩展性,Linux下可以自己编写Shell脚本检查监控数据,Windows下则可以通过Vbscript脚本来检查监控数据。下面实例讲解HostMonitor的配置和以及分别监控Linux和Windows下内存的空闲比率。

  本例中使用到的机器IP以及软件情况如下:

1. 192.168.1.101   安装有Windows2003的监控服务器(装有HostMonitor程序)

2. 192.168.1.201   Linux服务器(安装有RMA-agent for Linux)

3. 192.168.1.202   Windows服务器(安装有RMA-agent for Windows)

    Hostmonitor的安装没什么好说的,到Hostmonitor的官方网站下载安装程序然后在Windows上根据提示一步一步操作就可以了

1 RMA程序的配置

    RMA程序安装在远程计算机上,Hostmonitor进行监控时需要和RMA程序交互。

1.1 RMA for Linux 的安装配置

    到Hostmonitor的官方网站下载RMA-agent程序for Linux,建议下载1.25版本,高版本可能会提示某个lib.so文件找不到。上传到Linux服务器的/opt目录下,接下来的操作用管理员身份执行。解压缩,确保RMA程序有执行权限,使用Vi编辑器打开rma.cfg文件,修改【Basic】项目处的RmaPath,RMAPath指向rma执行程序所在的路径,如果该路径不正确将导致RMA程序不能启动。

    e.g:   RmaPath=/opt/rma

    然后修改Password=abcd1234,为RMA-agent程序指定访问密码,后面马上就要用到这个密码。

    修改【EnabledTests】项目下的 项目,检查ShellScript=1是否存在,不存在则手动添加,接下来的监控需要通过RMA-agent执行脚本检查服务器的内存使用情况

    检查【IncomeFilter】项目下的FilterActive,看访问列表是否激活,即FilterActive的值如果为1,请将它设置为0

    最后执行rma程序,如果有报错则需要检查rma.cfg文件的参数是否正确

1.2 RMA For Windows的配置

    在192.168.1.101 上安装HostMonitor时,只要勾选了RMA模块,就会在192.168.1.101 机器上安装RMA For Windows程序。 由于需要监控的机器为192.168.1.202,所以我们将HostMonito程序拷贝到192.168.1.202上,然后运行安装程序,在安装界面中只要勾选RMA模块就行了。

    

图1-1  安装时选择自定义安装

图1-2  安装时选择RMA模块

    接下来需要对RMA-程序做一下配置才能保证我们的程序能够访问。打开C:\Program Files\HostMonitor8\RMA-Win目录,执行rma_cfg.exe,配置Passive RMA

图 1-3  RMA配置界面

    设置password为abcd1234,更改IP访问限制为Accept connections from any Ip address,然后注意勾选Enable Follwing Tests的列表框中[Actice]Script复选框,点击apply按钮然后点击Install将RMA-agent安装成windows服务,最后检查一下如果服务没有自动启动的话还需要点击start按钮手工启动RMA-agent服务

2 脚本编写

2.1  Linux空闲内存比率计算

    在Linux下查看内存我们一般用free命令:

[root@jacky]# free

           total       used        free          shared    buffers     cached

Mem:       3266180    3250004      16176          0         110652    2668236

-/+ buffers/cache:    471116       2795064

Swap:       2048276    80160       1968116

    下面是对这些数值的解释:

    total:总计物理内存的大小。

    used:已使用多大。

    free:可用有多少。

    Shared:多个进程共享的内存总额。

    Buffers/cached:磁盘缓存的大小。

    第三行(-/+ buffers/cached):

    used:已使用多大。

    free:可用有多少。

    第四行就不多解释了。

    区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

    第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

    所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

    如上例:

    2795064=16176+110652+2668236

    因此我们要计算的空闲内存显示比率就是2795064/3266180

    该数据可以用脚本来计算

PfreeMem=`free -m | awk 'NR==3{print $4}'`;Ptotal=`free -m | awk 'NR==2{print $2}'`;PCOUNT=`echo "($PfreeMem*100/$Ptotal)"|bc`;;

free -m | awk 'NR==3{print $4}'命令得到数值2795064(1)

free -m | awk 'NR==2{print $2}’命令得到数值3266180(2)

两式相除然后乘以100得到空闲内存比率

    接下来则需要在HostMonitor中按照HostMonitor的规范来编写脚本,首先从菜单中打开脚本管理器Test->New->Shell Script Test->Script Manager,出现脚本管理器的界面,管理器中有一个SYSTEM:MemFree的脚本,拷贝该脚本然后重命名为SYSTEM:MemFree:CUSTOM

    将SYSTEM:MemFree:CUSTOM脚本中case语句中Linux)对应节的内容用上面的脚本替换。脚本编写工作就完成了,脚本的具体内容可以参考附件1。接下来需要配置HostMonitor让RMA-agent隔一段时间执行一遍SYSTEM:MemFree:CUSTOM脚本,获取192.168.1.201服务器的内存使用情况。

1)  执行菜单命令Test->New->Shell Script Test->SYSTEM:MemFree:CUSTOM,出现监控配置界面

图1-4  shell script 配置界面

    Agent选择192.168.1.201,如果没有agent则需要手工配置,配置界面中只要输入前面password参数处设置的密码以及安装有RMA-agent程序的IP就配置成功了。

2)在params处填写30,表示当内存的空闲比率小于百分之三十就报警,点击OK,就可以对192.168.1.201的机器进行监控了

 2.2  Windows空闲内存比率计算

    Windows的内存空闲比率需要使用Vbscript来实现,Hostmonitor为执行Windows的Vbscript提供了Active Script的接口,在HostMonitor安装目录下有个Example目录,下面存存放了Vbscript的一些例子,我们可以对照例子进行脚本的编写,只可惜我没找到传递参数到脚本的方法,后面例子中的那个比例是写死在脚本里面的。

在Windows中没有free,awk等命令行工具来获取系统的内存使用情况,不过Windows提供了WMI接口供人们查询系统的相关的一些信息,Windows Management Instrumentation (WMI)是可伸缩的系统管理结构,该规范采用一个统一、基于标准且可扩展的面向对象接口。它提供与系统管理员信息和基础WMI API交互的标准方法,主要由系统管理应用程序开发人员和系统管理员用来访问和操作系统管理信息;它可用来生成组织和管理系统信息的工具,使系统管理人员能够更密切的监视系统活动。

    WMI提供了一套内置在Microsoft Windows操作系统中的丰富的系统管理服务,可以在有大量的应用程序、服务和设备的系统中提供全方位的管理功能。它允许应用程序的开发者,使用简单的、一致的机制,去查询企业中的任一台计算机上的信息,或是进行系统配置。

 

    通过WMI接口可以获得的信息量是惊人的,包括硬件设置,状态信息,驱动器配置,BIOS信息,应用程序的设置,事件记录信息,以及其他。WMI通过一组API来获得信息,但它表征的是一种通过一个简单,工业标准对象管理模式来获取信息的函数。这使得应用程序的开发者不必学习Windows的每一个API的具体细节。

空闲内存和总的物理内存就可以通过WMI接口来获取。

    空闲内存对应FreePhysicalMemory,总的物理内存对应TotalVisibleMemorySize,这两个量都在Win32_OperatingSystem中定义。我们利用WMI的Vbscript接口可以获得内存利用率。

 FUNCTION GetMemUsage()

  DIM strComputer,memusage,objWMI,colOS,objOS

  strComputer = "."

  set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

  set colOS = objWMI.InstancesOf("Win32_OperatingSystem")

  for each objOS in colOS

    memusage = round((objOS.FreePhysicalMemory / objOS.TotalVisibleMemorySize)*100) & "%"

  next

  set objWMI=Nothing

  GetMemUsage=memusage

END FUNCTION

具体的脚本内容可以参考附件2

编写好脚本后需要对HostMonitor进行配置

1)  执行菜单命令Test->New->(Actice) Script test,出现监控配置界面

 图1-5 Active Script脚本配置界面

 

2)指定agent为192.168.1.202

3)指定执行的脚本,即在Run Script from external file处指定脚本为我们自己编写的监控内存使用率的脚本

4)勾选Translate macros

嗯,现在Linux和windows的内存空闲比率都可以在Hostmonitor的监控窗口显示出来了。

 

附件1 Linux监控内存空闲比率的脚本

#!/bin/sh

if [ $# -ge 1 ]

then

  OS=`uname`

  case $OS in

    AIX)    PCOUNT=`vmstat|tail -1|awk '{print $4*4}'`;;

    Linux)  PfreeMem=`free -m | awk 'NR==3{print $4}'`;Ptotal=`free -m | awk 'NR==2{print $2}'`;PCOUNT=`echo "($PfreeMem*100/$Ptotal)"|bc`;;

    FreeBSD)PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    NetBSD) PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    OpenBSD)PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    SunOS)  PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    *) echo 'ScriptRes:Unknown:script is not designed for '$OS

       exit;;

  esac

  if [ $PCOUNT -le $1 ]

  then

    echo "ScriptRes:Bad:"$PCOUNT"%"

  else

    echo "ScriptRes:Ok:"$PCOUNT"%"

  fi

else

  echo 'ScriptRes:Unknown:not enough parameters specified'

fi

 

附件2 Windows监控内存使用比率的脚本

'-----------------------------------------------------------------------------

'File    : MemUsage.VBS

'Purpose : Check memory usage of Dest Host

'Req     : Test's option "Translate macros" must be enabled

'Language: Vbscript

'Version : 1.0

'-----------------------------------------------------------------------------

Option Explicit

const statusAlive       = "Host is alive:"

const statusDead        = "No answer:"

const statusUnknown     = "Unknown:"

const statusNotResolved = "Unknown host:"

const statusOk          = "Ok:"

const statusBad         = "Bad:"

const statusBadCOntents= "Bad contents:"

const memoryFreeRatio = 30

'The memoryFreeRatio param means that if the memory of your windows system  is low than 30 percent of total physical memory,

'Host Monitor Will Alert you

'---- entry point ----

 

FUNCTION performtest()

  DIM CheckResult,RealRatio

  IF "%Reply%"="%"+"Reply"+"%" THEN

     performtest = statusUnknown+"Please enable 'Translate macros' option"

  ELSE

    CheckResult = GetMemUsage

    IF CheckResult<>"%Reply%" THEN

       performtest = statusBad+CheckResult

    ELSE

       RealRatio=CInt(Left(CheckResult,Len(CheckResult)-1))

       IF  RealRatio >   memoryFreeRatio  THEN

       performtest = statusOk+CheckResult

       ELSE

       performtest = statusBad+CheckResult

       END IF

    END IF

  END IF

END FUNCTION

 

'----- functions -----

 

FUNCTION GetMemUsage()

  DIM DestComputer,MemUsage,ObjWMI,DestOS,objOS

  DestComputer = "."

  set ObjWMI = GetObject("winmgmts:\\" & DestComputer & "\root\cimv2")

  set DestOS = ObjWMI.InstancesOf("Win32_OperatingSystem")

  for each objOS in DestOS

   MemUsage = round((objOS.FreePhysicalMemory / objOS.TotalVisibleMemorySize)*100) & "%"

  next

  set ObjWMI=Nothing

  GetMemUsage=MemUsage

END FUNCTION


推荐阅读
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
author-avatar
婷婷Yo-jiang_373
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有