有关多线程系统中信息收集和时间测量的建议

时间:2012-07-22 21:12:38

标签: java multithreading logging open-source time-measurement

我发现自己陷入了一个非传统的问题。我将用Java编写一个组件,它将从多线程系统中收集一些信息。我将非常感谢能够帮助我取得进步的任何信息或建议。以下是一些细节:

-system包含许多在彼此之间交换信息的子系统(例如,一个组件可以运行其他组件来执行某些操作    记录或计算数据)

- 在系统上执行的每个操作更多的是一系列命令,并导致连续运行少量组件,

-system获取大量请求,操作没有ID,因此难以跟踪哪个操作属于哪个链(I    需要在链的每一步获得操作时间)

我必须处理的问题: -lack操作上的ID - 在子系统之间交换ID 至少可能改变代码(它是一个巨大的系统) - 最终找到解决此类问题的现有开源解决方案(或至少部分问题)

以下是来自单个操作的组件的示例结果:

搜索nr 60

组件1 45s Component6 2s 组件4 32s Component2 4s

其中45,2,32,4代表每个组件花费的时间

如果有人发现自己在解决类似问题或在伐木/信息收集方面有经验,那么您的建议可以帮助我。

编辑: 我在AspectJ中创建了一个组件,它可以测量每个方法的“时间”,并将每个子系统的结果聚集在一起。主要问题是我无法识别哪个日志属于哪个请求(例如特定的“搜索号60”或“添加号5”请求)。所以问题是:创建请求ID的任何有效方法都可以通过控制流来传输(以及如何传输它),而无需大量更改源代码?

1 个答案:

答案 0 :(得分:0)

如果操作在单个JVM中,那么您可以使用他们的系统哈希码(通过System.identityHashcode()获取来跟踪对象。如果系统是多进程或分布式的,那么您运气不好这种方法。

您可以使用aspect-oriented programming编织检测代码,而无需更改现有代码。