Ank*_*rVj 4 java scala cpu-usage akka
我知道在Java中可以使用ThreadMXBean来获取任何线程的CPU利用率.
但是,据我所知,可以安排一个actor在线程池的任何线程上执行.因此,getCurrentThreadCpuTime来自同一个演员的后续调用最终可能会提供完全不相关的数字.
以上是真的吗?如果是,是否有任何方法可以找到演员本身的CPU利用率?
你的想法是正确的.
默认情况下,Akka根据需要从线程池中分配一个空闲线程,不会对发送给actor的每个消息使用池中的哪个线程做出承诺(虽然批处理往往意味着发送给同一个actor的消息靠近在一起将倾向于在同一个线程上).Akka确实允许配置线程池,这可能包括为每个actor配置一个线程.但是,跨多个actor共享线程避免了SEDA架构的一些弱点(在多插槽设置中可能会遇到延迟增加的情况).
Java中的CPU利用率在最好的时候是棘手的.Java将线程调度委托给操作系统,并且不会暴露从操作系统查询该信息的方式.添加Akka对线程池的使用,并将Akka调度与actor运行时分开,这导致我们说答案是否定的; 没有受支持的方法来获得每个actor的准确CPU利用率.
作为替代方案,您可以测量每个Actor内的挂钟时间.通过向每个actor的receive方法添加自己的包装器,这是最简单的方法.TypeSafe曾经为Akka提供监控工具,他们已经停止使用,而是开始与第三方合作以提供企业监控.