java - 我该如何解决 MongoWaitQueueFullException?

标签 java multithreading mongodb threadpool mongodb-query

我运行一个 java 程序,它是一个线程执行程序,可将数千个文档插入到 mongodb 中的表中。我收到以下错误

Exception in thread "pool-1-thread-301" com.mongodb.MongoWaitQueueFullException: Too many threads are already waiting for a connection. Max number of threads (maxWaitQueueSize) of 500 has been exceeded.
    at com.mongodb.PooledConnectionProvider.get(PooledConnectionProvider.java:70)
    at com.mongodb.DefaultServer.getConnection(DefaultServer.java:73)
    at com.mongodb.BaseCluster$WrappedServer.getConnection(BaseCluster.java:221)
    at com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:508)
    at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:456)
    at com.mongodb.DBTCPConnector.getPrimaryPort(DBTCPConnector.java:414)
    at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:176)
    at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:159)
    at com.mongodb.DBCollection.insert(DBCollection.java:93)
    at com.mongodb.DBCollection.insert(DBCollection.java:78)
    at com.mongodb.DBCollection.insert(DBCollection.java:120)
    at ScrapResults103$MyRunnable.run(MyProgram.java:368)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)

我该如何解决这个问题?请帮我。

最佳答案

您需要检查您在设置连接时给出的每个主机的连接值是多少(查看异常我认为您应该将其设置为 500)。

MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectionsPerHost(200);
MongoClientOptions options = builder.build();
mongoClient = new MongoClient(URI, connectionOptions);

设置每个主机的连接数的理想方法是反复试验,但您需要确保设置的值不应超过打开 mongo shell 并执行可以拥有的连接数:

db.serverStatus().connections.available

关于java - 我该如何解决 MongoWaitQueueFullException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346951/

相关文章:

java - 如何使用 Spring MVC 获取所有文件名?

java - 为什么 Kotlin/Java 没有抢占式调度程序的选项?

java - threadStatus 的值为 "225",这是什么意思?

java - ConcurrentHashMap 和跨越 2 个单独调用的操作

java - PBEKeySpec 的盐、迭代计数和 key 长度的默认值

java - 按对象属性对对象的 ArrayList 进行排序

c++ - 多线程并行选择排序

MongoDB 太多身份验证日志消息

javascript - 使用异步 waterfall 填充查询选项

MongoDB错误不是master和slaveOk=false