记录阿里巴巴QA架构组成长点滴。2008年关键词为效率,技术,影响力!QA/测试架构师定义:开发和设计测试框架测试库;纵横全局的考虑产品的功能,设计复杂的测试系统;负责研发某一项特定的测试技术;为公司考虑如何提高测试效率。领导公司测试技术的发展和测试策略上的方向,关注整个公司的测试部门的问题,前瞻性的考虑未来的版本的测试策略和技术。测试架构师计划/设计测试平台,关注着产品的测试过程,提供咨询服务,影响到公司内的测试机构测试社区,以及开发机构等,对产品各个方面施加深远而正确的影响,最终提高整体软件质量。

jmeter资源监控器开发——关键代码分析

上一篇 / 下一篇  2008-07-31 22:14:50 / 个人分类:开源工具与新技术研究

查看( 1053 ) / 评论( 1 )

by jack

代码分析也无需事无巨细皆列而剖之,只要找到关键所在也就是了;又不然列一堆的声明上来,纵然有人有耐心看下去,我也没耐心写下去啊。特别关注了三个类,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="&#63;" virtualHost="&#63;" method="&#63;" currentUri="&#63;" currentQueryString="&#63;" protocol="&#63;" /></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不是就四条么?

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


TAG: 开源工具与新技术研究

wangs的个人空间 wangs 发布于2008-08-15 17:47:08
得支持。
我来说两句

(可选)

日历

« 2021-10-27  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 111557
  • 日志数: 163
  • 文件数: 1
  • 建立时间: 2008-02-26
  • 更新时间: 2008-12-10

RSS订阅

Open Toolbar