[英]How to limit (Queue) the number of threads executing against a given db (Separate data for each concurrent test)?
[英]How to limit number of threads all concurrent methods at once
我正在处理一个遗留项目,它使用 Java 8、Spring、HikariCP 和 MySQL。微服务的方法由 Kafka 主题触发并开始报告操作。 几乎所有触发的方法都有这个,其中一些在它们的块中有相同的用法。
new ForkJoinPool().submit(() -> { users.parallelStream().forEach(user ->
该应用程序创建 8-9k 线程,所有线程都尝试获取或创建记录。 然而,数据库无法处理这些请求并开始抛出异常,Zabbix 发送了关于堆 memory 使用率超过 %90 的邮件:
原因:java.sql.SQLTransientConnectionException:HikariPool-2 - 连接不可用,请求在 30000 毫秒后超时。
当我检查数据库并看到 max_connections = 600 的变量时,但这还不够。
我想为应用程序级别设置线程数限制。 我尝试设置这些参数,但线程大小并没有减少。
SPRING_TASK_EXECUTION_POOL_QUEUE-CAPACITY,SPRING_TASK_EXECUTION_POOL_MAX-SIZE,-Djava.util.concurrent.ForkJoinPool.common.parallelism
有什么财产可以解决这个问题吗?
我已将所有new ForkJoinPool() to ForkJoinPool.commonPool()
并使用此参数来控制线程创建-Djava.util.concurrent.ForkJoinPool.common.parallelism
之后我解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.