2013-10-02 49 views
5

我們正在做的負載測試了一些良好的進展和縮放的阿卡應用程序,但我們看到scala.concurrent.forkjoin.ForkJoinPool.scan 20%()到來作爲visualvm中自我時間的20%左右的第二高熱點。自我時間(CPU)列僅顯示其中的一小部分(小於自我時間列值的1%)。阿卡 - 負載測試期間,forkjoinpool.scan在cpu時間

我懷疑這意味着阻止或上下文切換都可能存在問題,但我也不太清楚 - 任何一個可以深入瞭解? 如果是上下文切換,我猜測調度器吞吐量調整到更高的數字可能會使我們獲得收益,否則如果它是由阻塞引起的,我們需要再讀一遍代碼。

任何瞭解不勝感激。

+1

我會通讀這篇文章,因爲它提供了一些很好的見解,說明爲什麼你可能會看到很多忙碌的等待時間與FJP。你可能確實有一些阻塞代碼會導致速度變慢,從而導致空閒的FJP線程比預期的掃描更多的工作。 https://groups.google.com/forum/m/#!topic/akka-user/6HKTvw4yBnU – cmbaxter

+0

謝謝 - 線程是什麼引起我送行認爲必須有一些停放線程 - 這和掛鐘時間與該實際使用的CPU。這是一個有用的肯定+1 – JasonG

回答

8

掃描方法也是在那裏的ForkJoinPool「公園」,當他們找不到工作不活動的線程。

擁有20%的自我時間和1%的自我CPU時間讓我認爲你有在停放在那裏的ForkJoinPool非活動線程。

我假設你是在採樣模式下使用的VisualVM。默認情況下,VisualVM會過濾掉標準庫中的內容。看到這個答案如何改變設置,並更好地瞭解發生了什麼。 https://stackoverflow.com/a/16113781/1688542

+0

好吧,這太棒了 - 非常感謝你。我會盡力回報。 – JasonG

+0

是的 - 揭開太陽。*顯示sun.misc.Unsafe.park正在吃cpu。 – JasonG

相關問題