• 性能监控


    • 最近在总结项目的自动测试相关的技术和知识点.我们项目的自动测试,能够在进行功能测试的同时,一并记录各个功能的CPU和Memory占用情况.此篇博文介绍了我们做的性能监控的程序和涉及到的技术.
    • 这里,就做一个简易版的性能监控工具.首先,上图.
    • 从运行程序上看,用户需要输入被监控的机器名,进程名,是否监控CPU,是否监控Memory.最后还需要log文件的地址.
      • 注意: 由于可以监控非本机的远程机器,所以需要Check Button来测试是否能够正常的监控特定机器中的特定进程.如果能够正常监控,那么会把输入LogFile的button点亮.
    • 整个处理流程
      1. GetProcess,获取指定机器中的所有进程,如果获取成功,将所有的进程名称填入进程名称ComboBox中.
        1. 核心代码.
           1                var processes = Process.GetProcesses(PCName);
           2                processes.ToList<Process>().ForEach(
           3                     p =>
           4                     {
           5                         if (!string.IsNullOrEmpty(p.ProcessName))
           6                             processList.Add(p.ProcessName);
           7                     });
           8 
           9                 processList.Sort();
          10 
          11                 return processList;        
          GetProcess
      2. Check是否能够成功进行监控.

        1. 核心代码
          1 var pcc = new PerformanceCounterCategory("Process", PCName);
          2 
          3 return pcc.GetCounters(ProcessName) != null;
          CheckCanMonitor
      3. 监控
        1. 首先,我们的做法是每隔一秒钟记录一次性能状态.所以,使用了Timer(System.Windows.Forms.Timer)来进行间隔记录.
          1 timer.Tick -= Record;
          2 timer.Tick += Record;
          3 timer.Interval = Intervalseconds * 1000;
          4 timer.Enabled = true;
          Timer
        2. 使用PerformanceCounter来进行性能监控.解释一下需要用到的该对象的属性
          1. CategoryName.获取或设置此性能计数器的性能计数器类别的名称.我们最经常使用到的是“Cache”(缓存)、“Memory”(内存)、“Objects”(对象)、“PhysicalDisk”(物理磁盘)、“Process”(进程)、“Processor”(处理器)、“Server”(服务器)、“System”(系统)和“Thread”(线程).在我们的程序中,使用"Process"来监控进程.
          2. CounterName.获取或设置与此 PerformanceCounter 实例关联的性能计数器的名称.对于CPU的监控,使用"% Processor Time"来监控CPU的使用率.对于Memory的监控,使用"Working Set"来监控memory的使用量.
          3. MachineName.获取或设置此性能计数器的计算机名。
          4. InstanceName.获取或设置此性能计数器的实例名称。
          5. 核心代码
             1             CPUCounter = new PerformanceCounter();
             2             MemoryCounter = new PerformanceCounter();
             3 
             4             CPUCounter.CategoryName = "Process";
             5             CPUCounter.CounterName = "% Processor Time";
             6 
             7             MemoryCounter.CategoryName = "Process";
             8             MemoryCounter.CounterName = "Working Set";
             9 
            10             CPUCounter.MachineName = setting.ComputerName;
            11             CPUCounter.InstanceName = setting.ProcessName;
            12 
            13             MemoryCounter.MachineName = setting.ComputerName;
            14             MemoryCounter.InstanceName = setting.ProcessName;
            15 
            16             CPUCounter.NextValue();
            17             MemoryCounter.NextValue();
            PerformanceCounter
        3. 记录性能状态.使用PerformanceCounter.NextValue()方法来记录此时的性能状态.
          1. 核心代码
             1 datas.Append(DateTime.Now.ToString("hh:mm:ss") + ",");
             2                 if (setting.MonitorCPU)
             3                 {
             4                     datas.Append(CPUCounter.NextValue().ToString() + ",");
             5                 }
             6 
             7                 datas.Append(DateTime.Now.ToLongTimeString() + ",");
             8                 if (setting.MonitorMemory)
             9                 {
            10                     datas.Append((MemoryCounter.NextValue() / 1048576.0).ToString() + ",");
            11                 }
            RecordPerformance
        4. 停止性能记录动作.

          1. 核心代码
            1 timer.Enabled = false;
            2 Thread.Sleep(100);
            StopRecord
    • 为了方便大家理解,源代码附上.http://files.cnblogs.com/robyn/PerformanceMonitor.rar

  • 相关阅读:
    java(JDBC连接数据库)[完整版封装]
    java(JDBC连接数据库)[对Statement进行封装]
    HTML基础(DTD & 注释 &常见HTML编码)
    HTML基础(基本结构)
    HTML基础(格式标签)
    java(安全方便的从控制台读入数据)[对Scanner类进行封装,用正则表达式判断]
    java(JDBC连接数据库)[对PreparedStatement进行封装]
    for循环
    什么是操作系统
    字符串内置方法
  • 原文地址:https://www.cnblogs.com/robyn/p/3783602.html
Copyright © 2020-2023  润新知