2017-12-02 113 views
-2

我使用ThreadPoolExecuter作爲我的事務處理應用程序的隊列。以下是代碼剪斷並在PROD服務器所使用的值:ThreadPoolExecutor作爲隊列嗎?

new ThreadPoolExecutor(
    corePool, maxPool,keepAlive,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>()); 
  1. 核心池和Maxpool在性能負載服務器配置爲「50」。
  2. 每筆交易的交易處理時間爲300 MS。
  3. 當我們向該服務器發送30 tps時,CPU使用率達到了100%,服務器沒有響應。

是否有任何替代解決方案來處理70到80 TPS使用該服務器?有人能指導我處理這個問題的最佳方法嗎?

+1

300毫秒(即0.3秒)是長時間。每個核心可以在一秒鐘內完成3次以上的交易。核心數量將決定你的吞吐量;例如4核心將支持12 tps; 8核心將支持24 tps。對於80 tps你需要27個內核。 INSTEAD,你可能想看看減少你的處理時間。你在做什麼,需要300ms?!? – robertf

+1

您正在使用*隊列*作爲隊列。您正在使用Executor作爲執行者。 – EJP

+0

您需要運行一個分析器來查看實際需要的時間,然後優化慢速比特。目前你正在尋找優化可能與問題無關的事情。 –

回答

0

服務器處於100%CPU,30 tps表示您沒有工作計劃問題(請執行一些分析以查看時間花費)。要達到80 tps,您可能需要優化單個事務處理和/或添加CPU。