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 閱讀(364) 評論(0)  編輯  收藏 所屬分類: jmeter and badboy

          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 昭觉县| 博客| 阳朔县| 广东省| 金溪县| 永和县| 随州市| 奉新县| 平南县| 南木林县| 佳木斯市| 百色市| 汶川县| 堆龙德庆县| 缙云县| 富阳市| 汝南县| 清流县| 松滋市| 五原县| 察雅县| 伊川县| 泉州市| 山阴县| 福泉市| 崇仁县| 二手房| 渝中区| 分宜县| 灵寿县| 安陆市| 屏东县| 义乌市| 平南县| 博湖县| 黑山县| 临颍县| 阿坝县| 延安市| 富宁县| 乡城县|