2012-07-22 158 views
0

我發現自己陷入了一個非常規問題。我將用Java編寫一個組件,它將從多線程系統收集一些信息。我會感謝任何可以幫助我取得進展的信息或建議。下面是一些細節:關於多線程系統中信息收集和時間測量的建議

-System包含彼此之間交換信息(例如,一個組件可以運行其它組件做一些 記錄或計算的數據)許多子系統

- 每一個操作的系統上執行的是多個並且導致連續運行幾個組件,因此

- 系統獲取大量請求並且操作沒有ID,因此很難跟蹤哪個操作屬於哪個鏈(I 需要得到鏈上每一步的操作時間)

的問題,我必須處理:對操作的ID子系統 -least的代碼可能變化之間 -eventual交換ID的 - 缺乏(它是一個龐大的系統) -eventually發現現有的開放源代碼解決方案,這種

搜索NR 60

的Component1 45S Component6 2S Component4 32S:從單個操作我的組件的問題(或它的至少一些部分)

下面是和實施例的結果COMPONENT2 4S

凡45,2,32,4代表每個組件

花如果有人發現自己解決類似問題或具有在記錄/信息採集領域的經驗的時候,你的意見,可大大幫我。

編輯: 我在AspectJ中創建了組件,它可以測量每個方法周圍的時間並收集每個子系統的結果。主要問題是我無法確定哪個日誌屬於哪個請求(例如,特定的「搜索號碼60」或「添加號碼5」請求)。所以問題是:是否有創建請求標識的有效方法,可以通過控制流來傳輸(以及如何傳輸),而不需要更改源代碼?

+0

任何代碼這麼遠? – Reimeus 2012-07-22 21:25:04

+0

如果每個操作不能識別本身和操作請求/數據/結果對象的路徑通過你的系統可能會有所不同,我看不出如何有效地做到這一點。你不能在你的inh頂部某處添加'register/getID'操作eritance樹引入一個操作ID,最好用start()和end()方法來記錄操作對象的數組/列表數據成員中的操作時間? – 2012-07-23 04:23:39

回答

0

如果操作在單個JVM中,那麼您可以使用他們的系統哈希碼(通過System.identityHashcode()來獲取)來跟蹤對象,如果系統是多進程或分佈式的,那麼使用這種方法會很失敗。

您可能能夠使用aspect-oriented programming儀器儀表代碼編織在不改變現有的代碼。