現(xiàn)在越來越多人使用了。面對(duì)LoadRunner高昂的價(jià)格,免費(fèi)的jmeter真的是讓我們很是感動(dòng)啊。眼淚嘩嘩地。
于是乎現(xiàn)在關(guān)于jmeter應(yīng)用的各種入門教程啊,手冊(cè)翻譯啊,技巧集錦什么的,也越來越多了。不過大家可能感受想要而又要不到的是資源監(jiān)控,比如windows、linux的cpu,memory等。其實(shí)有些高手已經(jīng)自己開發(fā)了jmeter的plugin用于監(jiān)控了,但是似乎目前還沒有人share出來,這些高手呢,相信不會(huì)是本文的主要讀者了。
日前接受了任務(wù),希望能用jmeter來做一些性能測(cè)試。少不得要面對(duì)jmeter缺乏資源監(jiān)控的問題:有個(gè)監(jiān)視器,但只能利用tomcat的status頁監(jiān)視jvm的內(nèi)存和線程情況,功能單薄得像霓裳仙子的那件衣服,馬上要露點(diǎn)了。
看了一下jmeter監(jiān)視器的實(shí)現(xiàn)思路,是解析tomcat的manage上status的xml文件來獲得數(shù)據(jù),再展現(xiàn)到j(luò)meter的面板上。于是想到,如果通過修改監(jiān)視器代碼來解析和展現(xiàn)自己想要的內(nèi)容,再實(shí)現(xiàn)動(dòng)態(tài)的更新服務(wù)器上的xml文件——獲取到資源數(shù)據(jù)寫進(jìn)去,這樣jmeter不可以做到監(jiān)控各種服務(wù)器了么?
好,那么先下手分析jmeter的監(jiān)控器代碼。查了jmeter的開發(fā)手冊(cè),監(jiān)視器代碼沒有跟其它組件一起,而是單獨(dú)的monitor代碼。源碼分析簡述如下:
監(jiān)控器代碼srcmonitorcomponentsorgapachejmeter
文件:
monitorutil
MemoryBenchmark.java
Stats.java
visualizers
MonitorAclearcase/" target="_blank" >ccumModel.java
MonitorGraph.java
MonitorGuiListener.java
MonitorHealthPanel.java
MonitorHealthVisualizer.java
MonitorListener.java
MonitorModel.java
MonitorPerformancePanel.java
MonitorStats.java
MonitorTabPane.java
ServerPanel.java
Stats.java:計(jì)算解析得到的參數(shù)
public static int calculateLoad(Status stat)
public static int calculateStatus(Status stat)
public static int calculateMemoryLoad(Status stat)
public static int calculateThreadLoad(Status stat)
MonitorPerformancePanel.java:監(jiān)視器面板上的信息
MonitorStats.java:監(jiān)視器輸入數(shù)據(jù)
private static final String HEALTH = "stats.health";
private static final String LOAD = "stats.load";
private static final String CPULOAD = "stats.cpuload";
private static final String MEMLOAD = "stats.memload";
private static final String THREADLOAD = "stats.threadload";
斜體字部分是jmeter棄置不用的了,原因也寫在MonitorGraph.java的注釋里:”TODO is this needed? It's never read“老外是tmd能扯啊~
MonitorModel.java:生成數(shù)據(jù)模型,繼承自MonitorStats
MonitorGraph.java:圖像繪制
private void drawSample(int x, MonitorModel model, Graphics g, MonitorModel last)
MemoryBenchmark.java:數(shù)據(jù)基準(zhǔn)
MonitorStats mstats = new MonitorStats(Stats.calculateStatus(st), Stats.calculateLoad(st), Stats.calculateCpuLoad(st), Stats
.calculateMemoryLoad(st), Stats.calculateThreadLoad(st), "localhost", "8080", "http", System
.currentTimeMillis());
MonitorModel monmodel = new MonitorModel(mstats);
objs.add(monmodel);
MonitorAccumModel.java:監(jiān)視器數(shù)據(jù)操作相關(guān)
圖片:srccoreorgapachejmeterimages
資源文件(多語言):srccoreorgapachejmeter
esources