qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          meter資源監(jiān)控器開發(fā)——關(guān)鍵代碼分析

          代碼分析也無需事無巨細(xì)皆列而剖之,只要找到關(guān)鍵所在也就是了;又不然列一堆的聲明上來,縱然有人有耐心看下去,我也沒耐心寫下去啊。特別關(guān)注了三 個(gè)類,Stats、MonitorPerformancePanel、MonitorGraph。分別是獲取解析得到的數(shù)據(jù)、監(jiān)控器面板顯示和監(jiān)視器上的 圖像繪制。下面選取了一些關(guān)鍵代碼來進(jìn)行分析:

          首先是Stats.java,下面是計(jì)算內(nèi)存使用率的方法

          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值,然后計(jì)算內(nèi)存使用率,那么它解析的是什么東西呢?我們?nèi)×艘环輙omcat上的status的xml,內(nèi)容如下:

          <?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里再看一下

           

          其實(shí)上面那段代碼所取的,就是這個(gè)xml里面的memory free和total。

          這 個(gè)xml里這么多可以利用的內(nèi)容,要是我們都解析出來,不就可以有很多資源數(shù)據(jù)了?有人也許會問,這些都是什么tread信息什么,又沒有cpu啊,io 之類的信息,解析出來也沒用;要知道,這個(gè)xml文件你自己可以生成的,里面存什么數(shù)據(jù),你自己怎么定義都行啊,定義好了,寫一個(gè)動態(tài)更新這里面的數(shù)據(jù)的 腳本或程序,再利用web去展現(xiàn)這個(gè)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$
          這兩句就是設(shè)置監(jiān)視器上顯示的圖例,是啥東西呢?就是這個(gè):

          標(biāo)識了圖線的顏色和內(nèi)容標(biāo)簽

          上面兩句設(shè)置好了,要顯示就要看下面這段的了:

            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);
            }

          這段就是展現(xiàn)曲線的代碼,可以產(chǎn)生如下的效果:

          用jmeter做過tomcat監(jiān)控的人一定會覺得很熟悉。不過也許會問,為啥這個(gè)圖像上曲線這么多呢,jmeter不是就四條么?

          呵呵,不忙,且聽我慢慢道來。

          posted on 2012-05-02 12:36 順其自然EVO 閱讀(364) 評論(0)  編輯  收藏 所屬分類: jmeter and badboy

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 芮城县| 西丰县| 原平市| 磐安县| 大丰市| 曲阜市| 连平县| 岢岚县| 获嘉县| 襄樊市| 北辰区| 元阳县| 绥芬河市| 获嘉县| 武清区| 汪清县| 扶余县| 聂荣县| 日土县| 洛川县| 旬阳县| 富宁县| 仁寿县| 饶河县| 英德市| 太谷县| 大庆市| 晋城| 香格里拉县| 漾濞| 利津县| 宁阳县| 彰武县| 汉阴县| 威远县| 德安县| 六盘水市| 房山区| 固阳县| 县级市| 重庆市|