通过WMI接口监控服务器性能
WMI 是微软操作系统的一个内置的组件,通过使用WMI我们可以获取服务器硬件信息、收集服务器性能数据、操作Windows服务,甚至可以远程关机或是重启服务器。
一、在C#编程中使用WMI
要想在C#程序中使用WMI,必须添加System.Management.dll的引用,并使用System.Management命名空间。该命名空间提供对一组符合WMI基础结构的系统、设备和应用程序的管理信息和管理事件的访问。这里介绍一下常用的几个类:
ManagementScope用以连接WMI命名空间。
ManagementBaseObject包含管理对象的基本元素。
ManagementObject表示WMI实例。
ManagementObjectCollection表示通过WMI检索到的管理对象的集合。
ManagementObjectSearcher表示基于指定的查询检索管理对象的集合。该类也是用于检索管理信息的较为常用的入口点之一。
本人在写代码时将自己常用的一些关于WMI的基本操作进行了简单的包装。
1.ManagementScope
public ManagementScope GetManagementScope()
{
if (_managementScope == null)
{
if (Environment.MachineName.ToLower() == ServerName.ToLower())
{
_managementScope = new ManagementScope("\\\\" + ServerIP + "\\root\\cimv2");
}
else if (UserName != null && UserName.Length > )
{
ConnectionOptions connectionOptions = new ConnectionOptions();
connectionOptions.Username = UserName;
connectionOptions.Password = Password;
_managementScope = new ManagementScope("\\\\" + ServerIP + "\\root\\cimv2", connectionOptions);
}
else
{
throw new ManagementException();
}
}
return _managementScope;
}
2.ManagementObjectSearcher
private ManagementObjectSearcher GetManagementObjectSearcher(string wql)
{
return new ManagementObjectSearcher(GetManagementScope(), new SelectQuery(wql));
}
3.得到ManagementBaseObject集合
public List<ManagementBaseObject> GetManagementObjects(string wql)
{
List<ManagementBaseObject> managementObjects = new List<ManagementBaseObject>();
ManagementObjectCollection collection = GetManagementObjectCollection(wql);
foreach (ManagementObject managementObject in collection)
{
managementObjects.Add(managementObject);
}
return managementObjects;
}
4.获取系统信息
public object GetSystemInfo(ManagementBaseObject managementObject, string type)
{
return managementObject[type];
}
public object GetSystemInfo(string wql, string type)
{
return GetSystemInfo(GetManagementObjects(wql)[], type);
}
有了这些基本操作作为基础,我们就来看一下如何方便的获取CPU、内存、硬盘等基本信息。
二、CPU
1.CPU型号
public string Model()
{
return GetSystemInfo("SELECT * FROM Win32_Processor", "Name").ToString().Trim();
}
2.获取CPU个数
public int Number()
{
return GetManagementObjects("SELECT * FROM Win32_Processor").Count;
}
3.CPU使用率
public int AverageLoadPercentage()
{
int loadPercentage = ;
List<ManagementBaseObject> collection = GetManagementObjects("SELECT * FROM Win32_Processor");
foreach (ManagementObject managementObject in collection)
{
object load = GetSystemInfo(managementObject, "LoadPercentage");
if (load == null)
{
load = ;
}
loadPercentage += Int32.Parse(load.ToString());
}
return loadPercentage / collection.Count;
}
三、内存
1.总内存数
public string TotalSize()
{
float size = ;
List<ManagementBaseObject> collection = GetManagementObjects("SELECT * FROM Win32_OperatingSystem");
foreach (ManagementObject managementObject in collection)
{
size += long.Parse(GetSystemInfo(managementObject, "TotalVisibleMemorySize").ToString());
}
return (size / ).ToString("0.00") + "MB";
}
2.剩余内存数
public string FreeSize()
{
float size = ;
List<ManagementBaseObject> collection = GetManagementObjects("SELECT * FROM Win32_OperatingSystem");
foreach (ManagementObject managementObject in collection)
{
size += float.Parse(GetSystemInfo(managementObject, "FreePhysicalMemory").ToString());
}
return (size / ).ToString("0.00") + "MB";
}
四、硬盘
1.定义逻辑硬盘结构
public struct LogicalDisk
{
private string _deviceID;
private long _size;
private long _freeSize; public string Size
{
get
{
return ((float) _size / / / ).ToString("0.00") + "GB";
}
} public string FreeSize
{
get
{
return ((float) _freeSize / / / ).ToString("0.00") + "GB";
}
} public LogicalDisk(string deviceID, long size, long freeSize)
{
_deviceID = deviceID;
_size = size;
_freeSize = freeSize;
}
}
2.获取逻辑硬盘信息
private void GetLogicalDisk()
{
List<ManagementBaseObject> collection = GetManagementObjects("SELECT * FROM Win32_LogicalDisk WHERE DriveType = " + (int)System.IO.DriveType.Fixed); foreach (ManagementObject managementObject in collection)
{
long size, freeSize;
object managementObjectInfo;
managementObjectInfo = GetSystemInfo(managementObject, "Size");
if (managementObjectInfo == null)
{
continue;
}
else
{
size = long.Parse(GetSystemInfo(managementObject, "Size").ToString());
}
managementObjectInfo = GetSystemInfo(managementObject, "FreeSpace");
if (managementObjectInfo == null)
{
freeSize = ;
}
else
{
freeSize = long.Parse(GetSystemInfo(managementObject, "FreeSpace").ToString());
}
string deviceID = GetSystemInfo(managementObject, "deviceid").ToString();
_logicalDisks.Add(new LogicalDisk(deviceID, size, freeSize));
}
}
五、Windows服务
1.两个辅助方法
private ManagementObject GetServiceObject()
{
return GetManagementObjects("SELECT * FROM Win32_Service WHERE Name = '" + Name + "'")[] as ManagementObject;
} private object GetManagementObjectInfo(string type)
{
return GetSystemInfo(GetServiceObject(), type);
}
2.服务运行状况
public string Status()
{
return GetManagementObjectInfo("State") as string;
}
3.启动服务
public bool Start()
{
try
{
if (Status() == "Stopped")
{
GetServiceObject().InvokeMethod("StartService", null);
while (Status() == "Start Pending") ;
return true;
}
return false;
}
catch (Exception e)
{
throw new Exception(Name + "服务启动失败", e);
}
}
4.停止服务
public bool AcceptStop()
{
return (bool)GetManagementObjectInfo("AcceptStop");
} public bool Stop()
{
try
{
if (AcceptStop())
{
GetServiceObject().InvokeMethod("StopService", null);
while (Status() == "Stop Pending") ;
return true;
}
return false;
}
catch (Exception e)
{
throw new Exception(Name + "服务停止失败", e);
}
}
通过WMI接口监控服务器性能的更多相关文章
- Spring AOP在函数接口调用性能分析及其日志处理方面的应用
面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...
- 性能测试培训:Ajax接口级性能测试之jmeter版
性能测试培训:Ajax接口级性能测试之jmeter版 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest认为工具 ...
- 4月27号开学! 第6期《jmeter实战接口自动化+性能》课程,零基础也能学
2019年 第6期<jmeter实战接口自动化+性能>课程,4月27号开学! 主讲老师:飞天小子 上课方式:QQ群视频在线教学 本期上课时间:4月27号-6月9号,每周六.周日晚上20:0 ...
- Jmeter————监控服务器性能
1. 下载jmeter插件 上面2个是jmeter插件,第3个要放在监控的服务器中. 2. 解压压缩包 找到解压包中的JAR文件,并拷贝到jmeter的lib/ext目录下,这里下载的1.4版本的插件 ...
- Linux常用监控服务器性能命令
列举比较常用的几种监控服务器性能的Linux命令.其实,在我看来,目前针对Linux系统内存.硬盘.TCP/IP等等相关的指标,Linux本身自带的或者是一些开源项目等基本上都能达到这个获取服务器性能 ...
- 性能测试篇 :Jmeter监控服务器性能
转载:http://www.cnblogs.com/chengtch/p/6079262.html jmeter也可以像loadrunner一样监控服务器CPU.内存等性能参数,不过需要安装一些插件 ...
- Windows Server2008 监控服务器性能
下面学习Windows Server2008监控服务器性能包括 日志管理,归档日志,日志排错,怎么配置计算机以转发和收集事件,使用任务管理监控内存和CPU的使用,查看程序内存使用,查看程序CPU使用, ...
- Jmeter(四十八) - 从入门到精通高级篇 - Jmeter监控服务器性能(详解教程)
1.简介 JMeter是一款压力.接口等等的测试工具,Jmeter也可以像loadrunner一样监控服务器CPU.内存等性能参数,用来监控服务器资源使用情况,不过需要安装一些插件.JMeter正常自 ...
- Jmeter如何监控服务器性能
1.jmeter只需要安装一些插件 ,就可以像loadrunner一样监控服务器CPU.内存等性能参数 1.下载需要的jmeter插件 如图上面两个是jmeter插件,可以再下面的链接中下载 ...
随机推荐
- This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.
-- :::] This application is modifying the autolayout engine from a background thread, which can lead ...
- 关于word excel 等的信息隐藏技术
简单的word 信息隐藏技术分为两种 一 利用word自带的功能对信息进行隐藏,即选中要隐藏的文字 单击右键 选择字体 给隐藏选项打勾即可 这种信息隐藏比较简单 找到的方式为单机文件——找 ...
- 《Android深度探索HAL与驱动开发》第二章阅读心得
按照书中所讲的步骤,第一步先准备好搭建Android开发环境所需要的工具:JDK6或以上版本:Eclipse3.4或以上版本:ADT:CDT:Android SDK:Android NDK;交叉编译环 ...
- 第五篇T语言实例开发,数组空间使用
数组空间使用 排序算法 在实际中,当有多个无序数据时.我们就需要多数据进行排序 典型的排序:冒泡排序 排序原理 冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两 ...
- css高级
1.复杂选择器 1.作用 匹配 页面的元素 ... ... 2.选择器分类 1.兄弟选择器 1.作用 通过 元素的位置关系匹配元素 位置关系:兄弟关系(平级元素) <div> <p ...
- Codeforces Round #294 (Div. 2) D. A and B and Interesting Substrings
题意: 对于26个字母 每个字母分别有一个权值 给出一个字符串,找出有多少个满足条件的子串, 条件:1.第一个字母和最后一个相同,2.除了第一个和最后一个字母外,其他的权和为0 思路: 预处理出sum ...
- LEETCODE —— Linked List Cycle [Floyd's cycle-finding algorithm]
Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it ...
- css3 animation实现风车转动
项目中经常有用到动画效果,比如Loading.风车转动等等.最简单的办法是使用gif,但是gif在半透明背景下有白边,体验不友好,好在现在可以使用css3的anmiation来实现动画效果,极大的提升 ...
- DBMS_OUTPUT in SQL Developer
I fell sad for all the programmers(including) that has to SQL Developer as sql IDE. However, if you ...
- 全景VR视频游戏外包公司:技术分享使用U3D+CB制作VR游戏
随着Oculus宣布1月6日开启预售,2016年很可能成为VR游戏元年,但很多的调研显示,手游设备才是市场增长的关键,SuperData发布的报告显示,2016年全球VR游戏市场规模预计在51亿美元左 ...