jmeterMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,現在越來越多人使用了。面對LoadRunner高昂的價格,免費的jmeter真的是讓我們很是感動啊。眼淚嘩嘩地。
于是乎現在關于jmeter應用的各種入門教程啊,手冊翻譯啊,技巧集錦什么的,也越來越多了。不過大家可能感受最想要而又要不到的是資源監控,比如windows、linux的cpu,memory等。其實有些高手已經自己開發了jmeter的plugin用于監控了,但是似乎目前還沒有人share出來,這些高手呢,相信不會是本文的主要讀者了。
日前接受了任務,希望能用jmeter來做一些性能測試。少不得就要面對jmeter缺乏資源監控的問題:有個監視器,但只能利用tomcat的status頁監視jvm的內存和線程情況,功能單薄得就像霓裳仙子的那件衣服,馬上就要露點了。
看了一下jmeter監視器的實現思路,是解析tomcat的manage上status的xml文件來獲得數據,再展現到jmeter的面板上。于是想到,如果通過修改監視器代碼來解析和展現自己想要的內容,再實現動態的更新服務器上的xml文件——獲取到資源數據寫進去,這樣jmeter不就可以做到監控各種服務器了么?
好,那么就先下手分析jmeter的監控器代碼。查了jmeter的開發手冊,監視器代碼沒有跟其它組件一起,而是單獨的monitor代碼。源碼分析簡述如下:
監控器代碼src\monitor\components\org\apache\jmeter
文件:
\monitor\util
MemoryBenchmark.java
Stats.java
\visualizers
MonitorAccumModel.java
MonitorGraph.java
MonitorGuiListener.java
MonitorHealthPanel.java
MonitorHealthVisualizer.java
MonitorListener.java
MonitorModel.java
MonitorPerformancePanel.java
MonitorStats.java
MonitorTabPane.java
ServerPanel.java
Stats.java:計算解析得到的參數
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:監視器面板上的信息
MonitorStats.java:監視器輸入數據
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:生成數據模型,繼承自MonitorStats
MonitorGraph.java:圖像繪制
private void drawSample(int x, MonitorModel model, Graphics g, MonitorModel last)
MemoryBenchmark.java:數據基準
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:監視器數據操作相關
圖片:src\core\org\apache\jmeter\images
資源文件(多語言):src\core\org\apache\jmeter\resources
文章來源于領測軟件測試網 http://www.k11sc111.com/