qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

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

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

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

posted on 2012-05-02 12:36 顺其自然EVO 阅读(361) 评论(0)  编辑  收藏 所属分类: jmeter and badboy


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜