博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
meter资源监控器开发——关键代码分析
阅读量:6279 次
发布时间:2019-06-22

本文共 2743 字,大约阅读时间需要 9 分钟。

代码分析也无需事无巨细皆列而剖之,只要找到关键所在也就是了;又不然列一堆的声明上来,纵然有人有耐心看下去,我也没耐心写下去啊。特别关注了三 个类,Stats、MonitorPerformancePanel、MonitorGraph。分别是获取解析得到的数据、监控器面板显示和监视器上的 图像绘制。下面选取了一些关键代码来进行分析:

首先是Stats.java,下面是计算内存使用率的方法

public static int calculateMemoryLoad(Status stat) {

  double load = 0;
  if (stat != null) {
   double total = stat.getJvm().getMemory().getTotal();
   double free = stat.getJvm().getMemory().getFree();
   double used = total - free;
   load = (used / total);
  }
  return (int) (load * 100);
 }

很简单吧?就是获取total值和free值,然后计算内存使用率,那么它解析的是什么东西呢?我们取了一份tomcat上的status的xml,内容如下:

<?xml version="1.0" encoding="utf-8"?><status><jvm><memory free='937000' total='5177344' max='66650112'/></jvm><connector name='http-8080'><threadInfo  maxThreads="40" currentThreadCount="2" currentThreadsBusy="1" /><requestInfo  maxTime="1715" processingTime="2819" requestCount="20" errorCount="2" bytesReceived="0" bytesSent="108662" /><workers><worker  stage="S" requestProcessingTime="0" requestBytesSent="0" requestBytesReceived="0" remoteAddr="127.0.0.1" virtualHost="localhost" method="GET" currentUri="/manager/status" currentQueryString="XML=true" protocol="HTTP/1.1" /><worker  stage="R" requestProcessingTime="0" requestBytesSent="0" requestBytesRecieved="0" remoteAddr="?" virtualHost="?" method="?" currentUri="?" currentQueryString="?" protocol="?" /></workers></connector><connector name='jk-8009'><threadInfo  maxThreads="200" currentThreadCount="4" currentThreadsBusy="1" /><requestInfo  maxTime="0" processingTime="0" requestCount="0" errorCount="0" bytesReceived="0" bytesSent="0" /><workers></workers></connector></status>

这乱七八糟的,谁看得清啊,不要急,保存下来命名为.xml文件,扔到ie里再看一下

 

其实上面那段代码所取的,就是这个xml里面的memory free和total。

这 个xml里这么多可以利用的内容,要是我们都解析出来,不就可以有很多资源数据了?有人也许会问,这些都是什么tread信息什么,又没有cpu啊,io 之类的信息,解析出来也没用;要知道,这个xml文件你自己可以生成的,里面存什么数据,你自己怎么定义都行啊,定义好了,写一个动态更新这里面的数据的 脚本或程序,再利用web去展现这个xml,jmeter不就可以取来用了?

我们再看看MonitorPerformancePanel.java

 public static final String LEGEND_MEM = JMeterUtils.getResString("monitor_legend_memory_per"); //$NON-NLS-1$

 public static final ImageIcon LEGEND_MEM_ICON = JMeterUtils.getImage("monitor-orange-legend.gif"); //$NON-NLS-1$
这两句就是设置监视器上显示的图例,是啥东西呢?就是这个:

标识了图线的颜色和内容标签

上面两句设置好了,要显示就要看下面这段的了:

  JLabel mem = new JLabel(LEGEND_MEM);

  mem.setFont(plaintext);
  mem.setPreferredSize(lsize);
  mem.setIcon(LEGEND_MEM_ICON);
  legend.add(mem);

做过java的gui编程的朋友一定不会觉得陌生,呵呵

再下来看一下MonitorGraph.java

  if (MEM) {

   int mmy = (int) (height - (height * (model.getMemload() / 10000.0)));
   int lastmmy = (int) (height - (height * (last.getMemload() / 10000.0)));

   g.setColor(Color.orange);

   g.drawLine(lastx, lastmmy, xaxis, mmy);
  }

这段就是展现曲线的代码,可以产生如下的效果:

用jmeter做过tomcat监控的人一定会觉得很熟悉。不过也许会问,为啥这个图像上曲线这么多呢,jmeter不是就四条么?

呵呵,不忙,且听我慢慢道来。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

转载地址:http://ibbva.baihongyu.com/

你可能感兴趣的文章
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>
配置Quartz
查看>>
Linux 线程实现机制分析
查看>>
继承自ActionBarActivity的activity的activity theme问题
查看>>
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>