服务器监控程序调优

以前已经介绍过经过WMI接口获取服务器硬件信息、收集服务器性能数据,从而实现对服务器性能的监控。但因为监控项目较多,并且经过WMI获取服务器信息的方式速度相对较慢,所以有必要根据不一样状况对程序进行优化。
1、使用多线程并行处理
最初设计服务器监控程序的时候,仅使用一个for循环来处理,当时须要监控的项目较少,所以能在5分钟时间内完成一次完整的检测过程。随着时间的推动,须要监控的项目也愈来愈多,进行一次检测也由5分钟变成了12分钟。这样的性能显然是没法让人满意的,必须进行优化。
在这种状况下,最有效的提高性能的方法显然是使用多线程进行并行处理。当时监控程序使用的.net framework3.5,所以就使用了ThreadPool的QueueUserWorkItem方法实现多线程处理。程序修改后,运行速度果真提高明显,由12分钟提升到了1分钟。
2、使用TPL(任务并行库)
前些天,对服务器进行了升级,由Win2003 32位升级为Win2008 64位,升级以后,监控程序运行一次由1分钟变成了5分钟。开头怀疑是程序未编译成64位的关系,但重编译后仍是如此,思考再三决定把程序的运行环境改为.net framework4.0,看看.net在TPL中是否对ThreadPool的调度进行过优化,从而能得到性能的提高。遗憾的是程序修改后在Win2008 64位下运行仍然须要5分钟。
3、更换操做系统
接下来只能把问题的矛头指向了操做系统。因而简单的写了一个测试小程序,在该程序中利用WMI接口获取一台服务器的内存信息。将测试程序放在Win2003 32位下运行仅需0.3秒,在Win2008 64位下运行则须要2秒多,在Win2008 32位下运行仍是须要2秒多,看来果真是操做系统的缘由。在网上搜索了一下,找到一篇老外对WMI性能进行测试的文章《The WMI Performance Test (2012 Edition)》,测试结果代表Win2008的WMI性能确实有问题。小程序

根据测试结果,将程序迁到了Win2008 R2上运行,终于又能在1分钟内完成检测了。服务器