2017-12-02 114 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。