C#实现对远程服务器的内存和CPU监控
C#实现对远程服务器的内存和CPU监控小记
1、 主要使用到的组件有System.Management.dll
2、 主要类为 :ManagementScope
连接远程服务器示例代码:
private const string PROPERTY_CAPACITY = "Capacity";
private const string PROPERTY_AVAILABLE_BYTES = "AvailableBytes";
private const string PROPERTY_PROCESS_ID = "ProcessId";
private const string PROPERTY_PROCESS_NAME = "Name";
private const string PROPERTY_WORKING_SET_SIZE = "WorkingSetSize"; ConnectionOptions Conn = new ConnectionOptions();
//设定用于WMI连接操作的用户名
Conn.Username = "用户名";
//设定用户的口令
Conn.Password = "密码";
ManagementScope Ms = new ManagementScope("\\\\ip\\root\\cimv2", Conn);
Ms.Connect();
具体查询举例:
var query1 = new SelectQuery("SELECT * FROM Win32_PhysicalMemory");
var query2 = new SelectQuery("SELECT * FROM Win32_PerfRawData_PerfOS_Memory");
var query3 = new SelectQuery("SELECT * FROM Win32_Processor");
var query4 = new SelectQuery("SELECT * FROM Win32_Process");
var searcher1 = new ManagementObjectSearcher(Ms, query1);
var searcher2 = new ManagementObjectSearcher(Ms, query2);
var searcher3 = new ManagementObjectSearcher(Ms, query3);
var searcher4 = new ManagementObjectSearcher(Ms, query4);
查询内存和CPU:
var capacity = 0.0;
var free = 0.0;
var cpu = 0.0;
//
foreach (var o in searcher1.Get())
capacity += (double)Convert.ToUInt64(o[PROPERTY_CAPACITY]) / (double)( * );
foreach (var o in searcher2.Get())
free += (double)Convert.ToUInt64(o[PROPERTY_AVAILABLE_BYTES]) / (double)( * );
foreach (var o in searcher3.Get())
{
if (o["LoadPercentage"] != null)
{
cpu = long.Parse(o["LoadPercentage"].ToString());
}
else {
cpu = ;
}
}
举例远程重启某个进程(部分示例代码):
ConnectionOptions Conn = new ConnectionOptions();
Conn.Username = userName; //设定用户的口令
Conn.Password = pwd;
Ms = new ManagementScope("\\\\" + ip + "\\root\\cimv2", Conn);
Ms.Connect();
ManagementClass processClass = new ManagementClass(Ms, new ManagementPath("Win32_Process"), null);
//获得用来提供参数的对象
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
//设定命令行参数
inParams["CommandLine"] = path;// @"需要启动的进程路径";
//执行程序
ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);
Other、可以用程序操作批处理文件(.bat)来查询进程或者是关闭进程:
例如查询所有进程 :tasklist /S ip /U 用户名 /P 密码
关闭某个进程:
taskkill /S ip /U用户名/P 密码 /IM 需要关闭的进程名
部分示例代码:
public delegate void DelReadStdOutput(string result);
public delegate void DelReadErrOutput(string result);
public event DelReadStdOutput ReadStdOutput;
public event DelReadErrOutput ReadErrOutput;
/// <summary>
/// 注册事件
/// </summary>
private void Init()
{
ReadStdOutput += new DelReadStdOutput(ReadStdOutputAction);
ReadErrOutput += new DelReadErrOutput(ReadErrOutputAction); }
//----------------------部分实现代码==================
using (p = new Process())
{ //pause -- 停止
p.StartInfo.FileName = fileName; p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(p_Exited);
p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); p.Start();
//读取输出:
p.BeginErrorReadLine();
p.BeginOutputReadLine();
p.WaitForExit();
} void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
this.lab_tips.Text = "开始读取数据...读取时间可能有点长,请耐心等待!";
if (e.Data != null)
{
this.Invoke(ReadStdOutput, new object[] { e.Data });
}
}
// 读取进程信息:
public void ReadStdOutputAction(string s)
{ if (num > )
{
budiler.AppendLine(s);
}
this.textBox1.Text = budiler.ToString();
num++;
}
暂时就到这儿了。
C#实现对远程服务器的内存和CPU监控的更多相关文章
- SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存
SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存.这通常指示其它内存已损坏.(System.Data). 而登录本地数据库实例则能顺利登入,不存在上述问题. 试一试重置 ...
- 使用VisualVM监控远程服务器JVM
VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用.JVM堆内存消耗.线程.类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很 ...
- SQL SERVER2012 无法连接远程服务器
SQL SERVER2012 无法连接远程服务器,报"尝试读取受保护的内存"错误. 解决方法: 运行CMD,输入 netsh winsock reset,回车.重启SSMS,搞定.
- Windows系统中使用WMI获取远程服务器的信息
使用WMI获取远程服务器的状态 我做的项目里边主要包含两个内容: (1)对发布在服务器上的服务(IIS服务.WCF服务)是否可以正常访问: (2)获取服务器上的部分指标:如CPU.内存.磁盘空间信息等 ...
- VisualVM监控远程服务器JVM
VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用.JVM堆内存消耗.线程.类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很 ...
- Ubuntu14.04 mount远程服务器上的目录
备忘用. 一,远程服务器设置: 1,在/etc/exports中添加如下配置: /home/xxx *(insecure,rw,sync,no_root_squash,anonuid=123,anon ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- Python实现自动化监控远程服务器
最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短. 首先我们做一个定时或者实时脚本timedtask.py,让其定时监控目标服务器,两种方式: 第一种: #!/u ...
- Python 实现远程服务器批量执行命令
paramiko 远程控制介绍 Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录.首先来看一个简单的例子 import parami ...
随机推荐
- Received an invalid response. Origin 'null' is therefore not allowed access
Received an invalid response. Origin 'null' is therefore not allowed access. 今天在做二级联动,使用ajax请求xml数据, ...
- 注解:Hibernate双向N->N关联(两端都控制关联关系)
Person与Address关联:双向N->N,[连接表必须有],两端都控制关联关系 #需要说明的是:如果程序希望某一端放弃控制关联关系,则可以在这一段的@ManyToMany注解中指定mapp ...
- WPF基础知识、界面布局及控件Binding(转)
WPF是和WinForm对应的,而其核心是数据驱动事件,在开发中显示的是UI界面和逻辑关系相分离的一种开放语言.UI界面是在XAML语言环境下开发人员可以进行一些自主设计的前台界面,逻辑关系还是基于c ...
- 《DSP using MATLAB》示例Example5.16
代码: x1 = [1,2,2,1]; x2 = [1,-1,-1,1]; x3 = conv(x1,x2); % N = 5 n1 = 0:1:length(x1)-1; n2 = 0:1:leng ...
- Only Link: Inheritance and the prototype chain
Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_cha ...
- js闭包Demo
我们先看一个关于Javascript利用循环绑定事件的例子: 例如:一个不确定长度的列表,在鼠标经过某一条的时候改变背景. ﹤!DOCTYPE html PUBLIC "-//W3C// ...
- 学习Sass 的基本语法规则[Sass和compass学习笔记]
自从发现可编程的css语法 Sass和基于Sass的css库compass 一个给我的感觉像c# 另外一个给我的感觉像.NET Framework,一切都为了提升开发效率和降低开发大型web的门槛. ...
- 不想说作用域scope,因为是scopeTree,
ps:本文前面大部分是错的,后边大部分也是错的,搞混了不要怪我................... 这篇文章讲述了一个悲伤的故事,从一个似似而非的概念一步一步到错误的理解,最后勉强正确的过程 其实我 ...
- VB下对HTML元素的操作
<!DOCTYPE html> <html> <head> <title>test</title> </head> <bo ...
- 【JAVA】JDK -Calendar 遇到的 一个坑
Calendar是JDK 1.1增加的类 最近使用了下Calendar发现几个很让人抓狂的问题 源码: public final static int SUNDAY = 1; public final ...