1

從應用程序中收集和報告性能統計信息分析的最有效方法是什麼?
如果我有一個使用一系列網絡API的應用程序,並且我想在運行時報告統計信息,例如用於性能評估的java統計信息收集

Method doA() was called 3 times and consumed on avg 500ms 
Method doB() was called 5 times and consumed on avg 1200ms etc 

然後,我想用一個良好定義的數據結構(集合),其每個遠程呼叫每個線程更新,並且這可用於報告。

但我認爲這會使性能變差,花費在統計收集上的時間。我對麼?如果我爲此使用了後臺線程,那麼我將如何處理,而進行遠程調用的其他線程不知道此收集會聚?

感謝

+0

@Coolbeans:我想我的應用程序運行,並有一個單獨的標籤,做報告。我不想只在分析器下運行該應用程序。我想它更像是由應用 – Cratylus 2010-09-16 18:55:37

回答

0

有不同的方式去了解這一點:

  1. 動態變化(易碼 - 很可能改變的性能): 在這裏,您使用代碼織入(AspectJ的或類似的庫)或動態代理進行計數。這有一個非常快的設置,並可以給你一般的想法。但是,它會對性能造成最大的負擔,並且會在您的應用程序進行非常精細的調整時改變結果。

  2. 靜態改變(需要更多的代碼 - 低性能的影響): 在這裏,你創造一些ThreadLocals或根據你想如何跟蹤統計(每線程或整個應用程序)一個ConcurrentHashMap中,這裏的影響是一個地圖使用字符串鍵查找,不保證鎖定和整數增量。哪些不應該混淆你的數據,並且是相當穩定的,可以單獨衡量並從你的統計數據中分解出來。

希望這會有所幫助。

2

的AspectJ或ThreadLocal的編碼似乎有點過度設計給我的。

我認爲JavaSimon或火腿在您應用中的一些臨時啓動/停止是一個非常適合你,請參閱: http://code.google.com/p/javasimon/wiki/GettingStarted#Hello_world

http://jamonapi.sourceforge.net/#SimpleExamples

+1

提供的一個功能,我實際使用JavaSimon收集統計和AspectJ我想要收集哪些方法,所以我可以在我的Spring配置外部控制它,而無需編寫一行代碼工具。這也讓我改變1號線的春天代碼時,我不再需要捕獲的指標將其關閉。 – Melloware 2011-03-23 18:15:26