因此我们使用mongodb分片设置,使用mongos将查询路由到适当的分片。早期套接字超时的值没有改变,所以它是默认的无限。我们已经看到一些线程长时间阻塞了我们想要避免的某些查询,因此我们最初将超时设置为5秒。这导致了很多SocketTimeoutException
的出现。
ERROR pool-83-thread-23 Error while writing to mongos router
com.mongodb.MongoException$Network: Operation on server 127.0.0.1:27013 failed
at com.mongodb.DBTCPConnector.doOperation(DBTCPConnector.java:217) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollectionImpl.receiveWriteCommandMessage(DBCollectionImpl.java:491) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollectionImpl.writeWithCommandProtocol(DBCollectionImpl.java:430) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollectionImpl.insertWithCommandProtocol(DBCollectionImpl.java:387) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:186) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollection.insert(DBCollection.java:93) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollection.insert(DBCollection.java:78) ~[mongo-java-driver-2.12.4.jar:na]
at com.mongodb.DBCollection.insert(DBCollection.java:120) ~[mongo-java-driver-2.12.4.jar:na]
然后我们将超时时间增加到20秒,但问题仍然存在,尽管不那么频繁。令我们更加困惑的是,我们的统计计数器告诉我们,在我们的应用程序的峰值负载下,通常我们的所有写入操作都在15ms内完成。我们将写作关注设置为已确认。我们缺少什么?在读/写操作中超时线程时还需要考虑其他因素吗?或者是java驱动程序的东西? (我们正在使用2.12.4)。
提前致谢。