2013-12-09 81 views
2

我做了一個演員系統,我有一個收藏家演員和一個解碼演員。在我的PC(4個處理器)上,當我增加要解碼的文件數量時,我能夠看到資源使用情況的差異,但只要我部署了服務器(16個內核),它就只使用20%的CPU。我使用PC上的4個解碼器和服務器上的16個解碼器(兩種情況下都有1個收集器)運行系統。可能是什麼原因?有沒有辦法爲演員系統分配特定資源?Akka演員系統沒有從4核心擴展到16核心

  1. 我試過所有不同的調度員和執行者。
  2. 在整個過程中,我並沒有關閉任何參與者。
+1

聽起來像是I/O綁定與CPU綁定的經典案例。我的猜測是,你正在執行阻止I/O操作,這是不允許你達到全部CPU潛力的限制因素 – cmbaxter

+0

謝謝!你能否看看我的描述在評論中的答案,並建議我是否需要改變一些事情。 – Saki

回答

1

你能分享你的代碼,配置,JVM選項和服務器規格嗎?可能你的演員達到了一些內存訪問限制(NUMA,虛假分享,阻塞/由於CAS操作等很多而導致的飢餓)...

+0

感謝您的答覆:) – Saki

+0

我的Java選項: JAVA_OPTS = 「 - Xms1G -Xmx1G -XX:+ UseConcMarkSweepGC -XX:+ CMSClassUnloadingEnabled -XX:ParallelGCThreads = 2」 在配置上,我使用一個線程pool-執行者並行 - 最小= 8,並行 - 因子= 4.0,並行 - 最大= 64。我的收集器將文件名從目錄傳送到decoderActor。 decoderActor有一個robinround路由器,它將這些信息傳遞給解碼器工作者。解碼器工作人員開始解碼每個文件。如果我使用更多數量的解碼器工作人員,則會挑選更多數量的文件,但CPU使用率不會增加。 – Saki

+0

嘿我使用http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single-machine的java選項,現在我可以擴展到90%。這是內存訪問限制。 NUMA解決了它!好極了!!!!! – Saki