mongodb - Mongo中的SocketException

标签 mongodb scala casbah

我刚刚在 Mongo(产品环境)中设置了一个副本集。我现在遇到很多异常,如下所示(已剪辑)。

我进入 mongo 并在我的主 mongo 节点上运行了一个 serverStatus 命令,并且只有大约 300 个连接,所以它几乎无法正常工作。

以下是我的服务器代码中的连接选项设置:

auto_connect_retry = false    
connections_per_host = 10     
threads_multiplier = 10       
max_wait_time = 120000       
connect_timeout = 10000       
socket_timeout = 0           

我的配置有误吗?

Sep 9, 2013 8:31:26 PM com.mongodb.DBPortPool gotError
WARNING: emptying DBPortPool to /10.0.8.10:27017 b/c of error
java.net.SocketException: Connection timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:146)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
    at org.bson.io.Bits.readFully(Bits.java:46)
    at org.bson.io.Bits.readFully(Bits.java:33)
    at org.bson.io.Bits.readFully(Bits.java:28)
    at com.mongodb.Response.<init>(Response.java:40)
    at com.mongodb.DBPort.go(DBPort.java:142)
    at com.mongodb.DBPort.call(DBPort.java:92)
    at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244)
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273)
    at com.mongodb.DBCollection.findOne(DBCollection.java:347)
    at com.mongodb.DBCollection.findOne(DBCollection.java:332)
    at com.mongodb.casbah.MongoCollectionBase$class.findOneByID(MongoCollection.scala:232)
    at com.mongodb.casbah.MongoCollection.findOneByID(MongoCollection.scala:866)
    at com.novus.salat.dao.SalatDAO.findOneById(SalatDAO.scala:353)
    at com.novus.salat.dao.ModelCompanion$class.findOneById(ModelCompanion.scala:173)

最佳答案

通常连接超时发生在副本集中的以下任一情况
1)所有成员之间不能相互交流
2) 一个程序正在连接replica进行更新,由于过载或1st,它无法将它发送到primary
3)所有遗物不同步,一个落后太多
4)Leader选举正在进行中,但由于某种原因没有完成

请通过在主节点上发出 rs.status() 来检查您的 relica 集是否一致并且所有节点都在工作,同样如前所述,请检查主日志以获取更多信息

关于mongodb - Mongo中的SocketException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18708397/

相关文章:

scala - 查找 Scala Array 深层文档?

scala - 如何使用 Casbah for MongoDb 对域模型进行 CRUD 操作?

scala - 最简单程序的大型任务

scala - 如何让 sbt 将非 Java 源包含到已发布的工件中?

mongodb - ReactiveMongo 和 JSON4S

java - 为什么在 mongodb 中调用 MongoClient 实例时打开 2 个连接

gwt - 在 jetty 上部署 gwt web 应用程序

ruby-on-rails - 如何使用 Ruby MongoDB 驱动程序将文档字段值作为 ISODate 插入?

c# - 将 .NET Guid 转换为 MongoDB ObjectID

php - 找不到类 MongoRegex()