Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于多线程系统中信息采集和时间测量的建议_Java_Multithreading_Logging_Open Source_Time Measurement - Fatal编程技术网

Java 关于多线程系统中信息采集和时间测量的建议

Java 关于多线程系统中信息采集和时间测量的建议,java,multithreading,logging,open-source,time-measurement,Java,Multithreading,Logging,Open Source,Time Measurement,我发现自己陷入了一个非常规问题。我将用Java编写一个组件,它将从多线程系统中收集一些信息。我将感谢任何能帮助我进步的信息或建议。以下是一些细节: -系统包含许多相互交换信息的子系统(例如,一个组件可以运行另一个组件来执行某些操作) 记录或计算数据) -在系统上执行的每个操作更多地是一系列命令,并导致连续运行几个组件 -系统获得大量请求,而操作没有ID,因此很难跟踪哪个操作属于哪个链(I 需要获得链条每一步的操作时间) 我必须处理的问题是: -操作上缺少ID -最终在子系统之间交换ID -代码更

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

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

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

-系统获得大量请求,而操作没有ID,因此很难跟踪哪个操作属于哪个链(I 需要获得链条每一步的操作时间)

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

下面是我的组件在单个操作中的示例和结果:

搜索编号60

组件1 45s 组件6 2s 组件4 32s 部件2 4s

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

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

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

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


您可能可以使用编织插入指令代码而不更改现有代码。

如果每个操作无法识别自身,并且操作请求/数据/结果对象在系统中的路径可能会有所不同,我看不出如何有效地执行此操作。您能否在顶部某处添加“register/getID”操作r继承树来引入操作ID,最好使用start()和end()方法,这些方法可以在操作对象的数组/列表数据成员中记录操作时间?