zoukankan      html  css  js  c++  java
  • 服务器监控程序调优

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

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

  • 相关阅读:
    ECharts之柱状图 饼状图 折线图
    Vue自定义指令(directive)
    HDU 1231 最大连续子序列
    POJ 2533 Longest Ordered Subsequence
    HDU 1163 Eddy's digital Roots
    HDU 2317 Nasty Hacks
    HDU 2571 命运
    HDU 4224 Enumeration?
    HDU 1257 最少拦截系统
    HDU 2740 Root of the Problem
  • 原文地址:https://www.cnblogs.com/saville/p/3534014.html
Copyright © 2011-2022 走看看