ASP.NET MVC4 服务器检测
主要思路是,初始化PerformanceCounter(只读)性能计数器组件,将其与本地计算机上指定的系统性能计数器 关联
//计数器名(性能对象)性能计数器名
publicPerformanceCounter (string categoryName, string counterName, string
实例名
instanceName)
- 请记住,ASP.NET进程可以访问性能计数器,但不能读取,创建或删除计数器。
自定义一个SystemMonitor模板将监控服务器硬件设施的代码封装起来。可以在前端做一个 ajax 轮询去时刻监控服务器状态。
但是考虑到一个问题,这样做 AJAX 轮询势必会增加服务器的损耗。会不会适得其反。比如:容易造成线程堵塞。
模型代码:
///获取CPU信息
/** 使用该类型获取某个计数器的值也是很简单的,只需要指定类别,实例名,计数器名
* PerformanceCounter pc1 = newPerformanceCounter("Processor","% ProcessorTime","_Total"); //参数分别为:类别名,计数器名,实例名
*然后通过pc1.NextValue()获得相关计数器的值就可以了
*/
public stringPerformanceCounterFun(stringCategoryName = "Processor", stringInstanceName = "_Total", stringCounterName = "% Processor Time")
{
PerformanceCounter pc = newPerformanceCounter(CategoryName, CounterName,InstanceName);
dynamicValue_1 = pc.NextValue(); //这个值固定0
System.Threading.Thread.Sleep(1000);
// Thread.Sleep(1000); // wait for 1 second
dynamiccpuLoad = pc.NextValue();
return("CPU load = " + cpuLoad + "%");
}
//获取应用列表
public objectGetCategoryNameList()
{
PerformanceCounterCategory[] myCat2;
myCat2 = PerformanceCounterCategory.GetCategories();
// myCat2.CategoryName.ToString()
returnmyCat2;
}
//3根据categoryName,counterName,instanceName获得性能情况显示`
}
//=======================================获取内存信息==============================================================
///<summary>
///获取内存信息
///</summary>
publicclassMemoryInfo
{
//定义内存的信息结构
[StructLayout(LayoutKind.Sequential)]
publicstructMEMORY_INFO
{
publicuintdwLength;
publicuintdwMemoryLoad;
publicuintdwTotalPhys;
publicuintdwAvailPhys;
publicuintdwTotalPageFile;
publicuintdwAvailPageFile;
publicuintdwTotalVirtual;
publicuintdwAvailVirtual;
}
///<summary>
///kernel32.dll是Windows9x/Me中非常重要的32位动态链接库文件,属于内核级文件。
///它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
///</summary>
[DllImport("kernel32")]
privatestaticexternvoidGetWindowsDirectory(StringBuilder WinDir,intcount);
[DllImport("kernel32")]
privatestaticexternvoidGetSystemDirectory(StringBuilder SysDir,intcount);
[DllImport("kernel32")]
privatestaticexternvoidGlobalMemoryStatus(ref MEMORY_INFOmeminfo);
publicstringGetMemInfo()
{
//调用GlobalMemoryStatus函数获取内存的相关信息
MEMORY_INFO MemInfo = newMEMORY_INFO();
GlobalMemoryStatus(refMemInfo);
//拼接字符串
StringBuilder sb = new StringBuilder();
returnMemInfo.dwMemoryLoad.ToString();
}