Java 关于多线程系统中信息采集和时间测量的建议
我发现自己陷入了一个非常规问题。我将用Java编写一个组件,它将从多线程系统中收集一些信息。我将感谢任何能帮助我进步的信息或建议。以下是一些细节: -系统包含许多相互交换信息的子系统(例如,一个组件可以运行另一个组件来执行某些操作) 记录或计算数据) -在系统上执行的每个操作更多地是一系列命令,并导致连续运行几个组件 -系统获得大量请求,而操作没有ID,因此很难跟踪哪个操作属于哪个链(I 需要获得链条每一步的操作时间) 我必须处理的问题是: -操作上缺少ID -最终在子系统之间交换ID -代码更改最少(这是一个庞大的系统) -最终找到这类问题的现有开源解决方案(或至少是其中的一部分) 下面是我的组件在单个操作中的示例和结果: 搜索编号60 组件1 45s 组件6 2s 组件4 32s 部件2 4s 其中45,2,32,4代表在每个组件中花费的时间 如果有人发现自己解决了类似的问题,或者在日志记录/信息收集领域有经验,您的建议可以极大地帮助我 编辑:Java 关于多线程系统中信息采集和时间测量的建议,java,multithreading,logging,open-source,time-measurement,Java,Multithreading,Logging,Open Source,Time Measurement,我发现自己陷入了一个非常规问题。我将用Java编写一个组件,它将从多线程系统中收集一些信息。我将感谢任何能帮助我进步的信息或建议。以下是一些细节: -系统包含许多相互交换信息的子系统(例如,一个组件可以运行另一个组件来执行某些操作) 记录或计算数据) -在系统上执行的每个操作更多地是一系列命令,并导致连续运行几个组件 -系统获得大量请求,而操作没有ID,因此很难跟踪哪个操作属于哪个链(I 需要获得链条每一步的操作时间) 我必须处理的问题是: -操作上缺少ID -最终在子系统之间交换ID -代码更
我在AspectJ中创建了一个组件,它可以测量每个方法周围的时间,并收集每个子系统的结果。主要问题是我无法识别哪个日志属于哪个请求(例如,特定的“搜索编号60”或“添加编号5”请求)。所以问题是:是否有任何有效的方法来创建可以通过控制流传输(以及如何传输)而无需大量源代码更改的请求ID?如果操作在单个JVM中,那么您可能可以使用它们的系统哈希代码(通过获取以跟踪对象。如果系统是多进程的或分布式的,则使用这种方法是不走运的
您可能可以使用编织插入指令代码而不更改现有代码。如果每个操作无法识别自身,并且操作请求/数据/结果对象在系统中的路径可能会有所不同,我看不出如何有效地执行此操作。您能否在顶部某处添加“register/getID”操作r继承树来引入操作ID,最好使用start()和end()方法,这些方法可以在操作对象的数组/列表数据成员中记录操作时间?