2012-07-22 159 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仪器仪表代码编织在不改变现有的代码。