2012-07-07 72 views
0

我正在一個java應用程序有一個生產者 - 消費者模式。早些時候,製作人沒有按順序製作事件(例如,'2'是在'1'之前製作的,但消費者必須按順序發送它們(例如,'1',然後'2',然後'3'等)。爲了說明這個問題,TreeSet被用來維護一個隊列,並且爲了查看和刪除這些元素,在遍歷上也是這樣做的。到現在爲止還挺好。改變的是生產者現在按順序生成事件,因此我決定使用: -Java分析的可伸縮性和時間複雜性

a)一個LinkedBlockingQueue(它具有隊列的基本屬性,其中只能訪問第一個和最後一個元素,如它應該是一個隊列)。 b)使用LBQ使我從樹中的O(log n)到O(1)。

c)我不必再寫明確的同步了,ReentrantLock負責LBQ的放入和取出方法。

d)我不再需要寫明確的等待/通知,LBQ負責處理這個問題。 e)LBQ有2個鎖,因此put和take可以同時在不同的CPU上運行。 f)LBQ使用CAS來維護等待線程隊列。

所有的事情對我來說都很好。但我卡住了,下面是一些問題: -

a)我需要通過收集一些指標來證明在TreeSet上使用LBQ的優勢。我應該在我的eclipse中使用哪個免費的分析器? Visual VM很好,但有沒有更好的選擇?(Introscope將用於我的應用程序的顯式運行,而不是在我的本地eclipse上,這是我無法抗爭的一個限制,TPTP被拒絕)。

b)由於在LinkedBlockingQueue中使用了2個鎖,我該如何證明吞吐量(看起來在紙上)的增加?這是我希望看到並證明的一個重要方面。

感謝

+0

你最終使用的是什麼 – 2012-07-13 23:37:30

回答

0

想,如果你已經看過的Perf4(其graphingstatistics附加器一起),用於測量/顯示性能統計(http://perf4j.codehaus.org/)。如果由於某種原因不可行,請分享爲什麼它可能有用。

此外,您可以查看指標(http://metrics.codahale.com/)以及heapster &鴕鳥(如果可能的話)堆(性能測量)(https:// github的.com/mariusaeriksen/heapster)。使用指標,您可以依靠石墨或神經節顯示(如果不使用JMX)。

希望這會有所幫助。

+0

將有一個看看,讓你知道肯定。但是,衡量一下我的應用程序的吞吐量是否增加了什麼指標呢?也有你用他們與日食? – 100pipers 2012-07-07 16:39:20

+0

嗨 - 它更簡單,如果你使用maven(無論是perf4j還是codahale指標)。對於perf4j,你應該能夠下載jar文件並繼續進行,除非我的記憶讓我失望。對於簡單的測試,使用最小/最大/標準偏差/計數(在可能的情況下以圖形格式)將在與其他人分享時幫助您處理。 – 2012-07-07 17:27:44

0

如果要顯示內存/線程的使用情況,您可以嘗試使用visual vm或netbeans分析器。

0

我用JMeter做過類似的負載測試。它也可以(但我沒有這樣做)輕鬆計算throughput。就我而言,我必須編寫一個Java Request Java Request採樣器,它充當我的被測系統的客戶端。 Java請求採樣器的結果可以容易地由JMeter的聽衆graphed(並且那些顯示吞吐量)。這聽起來像你可能需要做同樣的事情。他們確實有TCP,HTTP等盒子採樣器,儘管你可以使用。