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 ...
随机推荐
- python基础之文件操作
对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...
- php 总结第一篇(望大家补充!谢谢)
/* 数组的常用函数 * * 数组的排序函数 * sort() * rsort() * usort() * asort() * arsort() * uasort() * ...
- pm2无法自动重启
在服务器上有个上传文件的服务,之前是pm2启动,每当有文件上传会自动重启 现在为了应对服务器宕机,我把启动脚本放在了另一文件夹内,所以就无法自动重启, 原文在 http://pm2.keymetric ...
- Android之EACCES (Permission denied)与Permission denied异常探密
话说,Accipiter君,最近又开始怒学Android了,记得刚开始还是09年学的,现在的手机还是华为出的最早的一款Android手机C8500,那时候就想好好学习Android,赚点小钱,可是~~ ...
- python学习笔记(1)
python简介 python是Guido van Rossum在圣诞节打发无聊的时间时候写出来的语言. python是解释性的语言. python是动态类型的语言. python是强类型定义语言(高 ...
- [LeetCode]Lowest Common Ancestor of a Binary Search Tree
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...
- OpenCV成长之路(2):图像的遍历
我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方 ...
- html基本知识点
<hr />定义下划线 <br/>定义换行<p>段落</p> <h1>标题</h1>h后的数字逐渐增大,字体逐渐减小;<h ...
- dedecms 按权重排序不准或BUG的处理方法
dede:list 的方法 1.找到"根目录\include\arc.listview.class.php"文件. 2.修改代码:在文件第727行处添加按weight排序判断代码( ...
- Linux 下MySql 重置密码
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录 ...