2014-10-27 76 views
4

我知道在Java中,可以使用ThreadMXBean來獲取任何線程的CPU利用率。如何獲得akka actor的CPU利用率

但據我所知,一個actor可以安排在線程池中的任何線程上執行。因此,來自同一演員的後續呼叫getCurrentThreadCpuTime可能最終會給出完全不相關的數字。

以上是真的嗎?如果是,是否有任何方法可以找到演員本身的CPU利用率?

回答

7

你的想法是正確的。

Akka默認根據需要從一個線程池中分配一個空閒線程,但不會承諾從該池中的哪個線程將用於發送給一個actor的每個消息(儘管批量處理往往意味着發送的消息對同一個演員靠近在一起將傾向於在同一個線程)。 Akka確實允許配置線程池,並且可以包括爲每個actor配置單個線程。然而,跨多個參與者共享線程可避免SEDA體系結構的某些弱點(它可能會在多套接字設置中增加延遲)。

在最好的時候,Java的CPU利用率是非常棘手的。 Java將線程調度委託給操作系統,並且不會從操作系統查詢信息方面暴露很多。添加Akka對線程池的使用,並將Akka調度與actor運行時分離開來,並且這導致我們說,答案是否定的;沒有支持的方法可以在每個參與者的基礎上獲得準確的CPU利用率。

作爲一種替代方法,您可以測量每個演員中的掛鐘時間。這可以通過將自己的包裝添加到每個actor的接收方法來完成。 TypeSafe曾經爲Akka提供監控工具,他們有discontinued,而是開始與thirdparties合作提供企業監控。

1

雖然!這篇文章&答案是相當old.i想更新答案

我比較類似的情況時,比較Java線程和演員的CPU利用率。

我使用了Kamon.io與https://www.datadoghq.com合作,以更好地瞭解演員的CPU,內存和網絡使用情況。