【发布时间】:2018-05-16 15:52:55
【问题描述】:
我使用ThreadPoolExecuter 作为我的事务处理应用程序的队列。以下是生产服务器中使用的代码片段和值:
new ThreadPoolExecutor(
corePool, maxPool,keepAlive,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());
- Core Pool 和 Maxpool 在性能负载服务器中配置为“50”。
- 每笔交易的交易处理时间为 300 毫秒。
- 当我们向该服务器发送 30 tps 时,CPU 使用率达到 100%,并且服务器没有响应。
是否有任何替代解决方案可以使用该服务器处理 70 到 80 TPS?有人可以指导我处理此问题的最佳方法吗?
【问题讨论】:
-
300 毫秒(即 0.3 秒)是很长的时间。每个核心可以在一秒钟内完成超过 3 个事务。核心数量将决定您的吞吐量;例如4核支持12 tps; 8 核将支持 24 tps。对于 80 tps,您需要 27 个内核。相反,您可能希望考虑减少处理时间。 300ms 你在做什么?!?
-
您正在使用 queue 作为队列。您正在使用执行器作为执行器。
-
您需要运行分析器来查看实际花费的时间,然后优化慢速位。目前,您正在寻求优化可能与问题无关的内容。
-
大量数据库验证作为事务处理的一部分。将找出查询和微调。
标签: java threadpool