2014-01-22 46 views
0

如何讓Play框架使用機器上的所有64個核心。無論我配置什麼,我都無法讓我的Play網絡應用程序使用全部64個內核。是否有一個我應該關注的具體設置?請幫忙!不使用全部64核心的播放框架

目前,我有以下配置:

play { 
    akka { 
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] 
    loglevel = WARNING 
    actor { 
     default-dispatcher = { 
     fork-join-executor { 
      parallelism-factor = 10.0 
      parallelism-max = 64 
     } 
     } 
    } 
    } 
} 

internal-threadpool-size=64 
iteratee-threadpool-size=64 

當我看機器處理,我可以看到,只有一個處理器核心的第三被利用。是否還有其他設置可以使用所有64個內核?

我們有一個WebSocket端點,在我們的Play控制器中的一個非阻塞模式下,使用WebSocket.Async調用。爲了加載測試這個WebSocket端點,我有一個使用Akka來動態創建多個Actor實例的簡單客戶端。這些Actor實例中的每一個都會創建一個新的WebSocket連接併發送幾千條消息。

通過單個WebSocket連接發送的消息數量和Actor實例總數都是可配置的。這樣,我可以真正加載測試Play框架公開的WebSocket端點。

但無論我做什麼,我都沒有看到服務器利用了它的所有內核。這實際上降低了我們的表現。有關Play框架中的哪些配置可以調整以確保在重負載下使用所有64個內核的任何建議?

這是我看到的時候玩框架負載可達(從日誌文件):

application.conf的合併:6,reference.conf:6 發揮{ #application.conf的合併:7 ,reference.conf:8個 阿卡{ #application.conf:9 日誌級別=警告 #application.conf:8 「事件處理程序」= [ #application.conf:8 「akka.event.slf4j。 Slf4jEventHandler「 」 #include application.conf:10,reference.conf:12 演員{ #application.conf:11 「默認調度員」{ #application.conf:13 「的fork-join-執行」{ #application.conf:15 「並行因子」= 2 # application.conf:14 「並行分鐘」= 8 #application.conf:16 「並行最大」= 256 } #application.conf:12 執行人= 「叉加入執行人」 } #reference.conf:13 retrieveBodyParserTimeout =「1秒」 } }}

+0

有什麼用我的播放器導入下面的語句呢?導入play.api.libs.concurrent.Execution.Implicits._? – sparkr

回答

1

實際使用的線程數量是parallelism-factor * availableProcessor,以最小值和最大值爲界。按照文檔:

「#如果你設置這將被用來‘執行=‘的fork-join執行人’’ 的fork-join-執行{ #線程封頂基於因子並行數的最小數量到 並行分鐘= 8

# The parallelism factor is used to determine thread pool size using the 
    # following formula: ceil(available processors * factor). Resulting size 
    # is then bounded by the parallelism-min and parallelism-max values. 
    parallelism-factor = 3.0 

    # Max number of threads to cap factor-based parallelism number to 
    parallelism-max = 64 
    } 

「 - http://doc.akka.io/docs/akka/2.2.3/general/configuration.html

+0

你的意思是說與並行 - 因子= 3.0和並行 - 最大= 64,我可以使用我所有的64核心? – sparkr

+0

當我查詢運行時可用的處理器時,我可以看到64.但實際上只有三分之一被使用。 – sparkr

0

你告訴阿卡每個處理器可以有10個線程,但在64

封頂線的總數可以降低parallelism-factor或提高parallelism-max(顯然做負載測試,看看哪一個實際上對您的應用程序表現更好)。

+0

平行度因子表示什麼影響?如何降低它將使用所有64核心? – sparkr

+0

@ user3102968例如,如果將它降低到1.0,則每個處理器將只使用一個線程。由於您最多有64個線程可用,如果您的應用程序需要它,那麼您將使用全部64個內核。 – estmatic

+0

http://www.playframework.com/documentation/2.2.x/ThreadPools – estmatic