0

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

-system 包含许多相互交换信息的子系统(例如,一个组件可以运行另一个组件来进行一些记录或计算数据)

- 在系统上执行的每个操作更像是一个命令链,并导致连续运行几个组件,

-系统收到大量请求并且操作没有ID,因此很难跟踪哪个操作属于哪个链(我需要获取链的每个步骤的操作时间)

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

这是我的组件从单个操作中获得的示例结果:

搜索 nr 60

Component1 45s Component6 2s Component4 32s Component2 4s

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

如果有人发现自己解决了类似的问题或在日志记录/信息收集领域有经验,您的建议可以极大地帮助我。

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

4

1 回答 1

0

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

您也许可以使用面向方面的编程来编织检测代码,而无需更改现有代码。

于 2012-07-22T21:26:23.080 回答