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监控的更多相关文章

  1. SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存

    SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存.这通常指示其它内存已损坏.(System.Data). 而登录本地数据库实例则能顺利登入,不存在上述问题. 试一试重置 ...

  2. 使用VisualVM监控远程服务器JVM

    VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用.JVM堆内存消耗.线程.类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很 ...

  3. SQL SERVER2012 无法连接远程服务器

    SQL SERVER2012 无法连接远程服务器,报"尝试读取受保护的内存"错误. 解决方法: 运行CMD,输入 netsh winsock reset,回车.重启SSMS,搞定.

  4. Windows系统中使用WMI获取远程服务器的信息

    使用WMI获取远程服务器的状态 我做的项目里边主要包含两个内容: (1)对发布在服务器上的服务(IIS服务.WCF服务)是否可以正常访问: (2)获取服务器上的部分指标:如CPU.内存.磁盘空间信息等 ...

  5. VisualVM监控远程服务器JVM

    VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用.JVM堆内存消耗.线程.类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很 ...

  6. Ubuntu14.04 mount远程服务器上的目录

    备忘用. 一,远程服务器设置: 1,在/etc/exports中添加如下配置: /home/xxx *(insecure,rw,sync,no_root_squash,anonuid=123,anon ...

  7. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  8. Python实现自动化监控远程服务器

    最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短. 首先我们做一个定时或者实时脚本timedtask.py,让其定时监控目标服务器,两种方式: 第一种: #!/u ...

  9. Python 实现远程服务器批量执行命令

    paramiko 远程控制介绍 Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录.首先来看一个简单的例子 import parami ...

随机推荐

  1. Received an invalid response. Origin 'null' is therefore not allowed access

    Received an invalid response. Origin 'null' is therefore not allowed access. 今天在做二级联动,使用ajax请求xml数据, ...

  2. JSON相关基础知识

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  3. js生成带参的二维码

    最近项目中有需求生成带参的二维码,考虑过用JAVA后台生成返回前端展示,后面了解到用jquery的qrcode.js插件可以很好现实 引入js: require.config({ baseUrl : ...

  4. xml 基础学习备忘

    <?xml version="1.0" encoding="UTF-8"? standalone="yes"> 这里的encod ...

  5. JavaScript闭包深入解析

    for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); } --上面这段 ...

  6. Redis 配置文件总结

    1.1 文件说明 1.1.1    主要文件说明 1 redis-server Redis服务器 2 redis-cli Redis命令行客户端 3 redis-benchemark redis-be ...

  7. HTML5新增的标签

    结构性元素<header><footer>定义页眉(与<head>不一样)和页脚 <section>定义section<article> 定 ...

  8. JDBC、JTA、Spring的事务管理

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么 ...

  9. 李洪强iOS经典面试题140-UI

    李洪强iOS经典面试题140-UI   UI viewcontroller的一些方法的说明viewDidLoad,viewWillDisappear, viewWillAppear方法的 顺序和作用? ...

  10. oracle优化

    sql语句 优化方式: 1select 语句中避免用"*" oracle在解析时,会将“*”依次转换成所有的列名(数据字典完成)耗时 2尽量多用commit语句 及时提交,释放资源 ...