【问题标题】:ThreadPoolExecutor as an Queue?ThreadPoolExecutor 作为队列?
【发布时间】:2018-05-16 15:52:55
【问题描述】:

我使用ThreadPoolExecuter 作为我的事务处理应用程序的队列。以下是生产服务器中使用的代码片段和值:

new ThreadPoolExecutor(
    corePool, maxPool,keepAlive,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());
  1. Core Pool 和 Maxpool 在性能负载服务器中配置为“50”。
  2. 每笔交易的交易处理时间为 300 毫秒。
  3. 当我们向该服务器发送 30 tps 时,CPU 使用率达到 100%,并且服务器没有响应。

是否有任何替代解决方案可以使用该服务器处理 70 到 80 TPS?有人可以指导我处理此问题的最佳方法吗?

【问题讨论】:

  • 300 毫秒(即 0.3 秒)是很长的时间。每个核心可以在一秒钟内完成超过 3 个事务。核心数量将决定您的吞吐量;例如4核支持12 tps; 8 核将支持 24 tps。对于 80 tps,您需要 27 个内核。相反,您可能希望考虑减少处理时间。 300ms 你在做什么?!?
  • 您正在使用 queue 作为队列。您正在使用执行器作为执行器。
  • 您需要运行分析器来查看实际花费的时间,然后优化慢速位。目前,您正在寻求优化可能与问题无关的内容。
  • 大量数据库验证作为事务处理的一部分。将找出查询和微调。

标签: java threadpool


【解决方案1】:

服务器处于 100% CPU 和 30 tps 表明您在工作调度方面没有问题(进行一些分析以查看时间是如何花费的)。要达到 80 tps,您可能需要优化单个事务处理和/或添加 CPU。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多