Mongo + Java + SocketTimeOut

我正在使用MongoDb,我在从DB读取记录时遇到了问题。 我能够在游标中获取它们,但是当我尝试从游标中获取记录时 cursor.hasNext()它给了我以下异常:
com.mongodb.MongoInternalException: couldn't get next element
        at com.mongodb.DBCursor.hasNext(DBCursor.java:459)
Caused by: java.net.SocketTimeoutException: Read 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:35)
        at org.bson.io.Bits.readFully(Bits.java:28)
        at com.mongodb.Response.<init>(Response.java:35)
        at com.mongodb.DBPort.go(DBPort.java:101)
        at com.mongodb.DBPort.go(DBPort.java:66)
        at com.mongodb.DBPort.call(DBPort.java:56)
        at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:211)
        at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:220)
        at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:220)
        at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:266)
        at com.mongodb.DBCursor._check(DBCursor.java:309)
        at com.mongodb.DBCursor._hasNext(DBCursor.java:431)
        at com.mongodb.DBCursor.hasNext(DBCursor.java:456)
也许我正面临这个问题,因为我的数据不断增加,所以我在光标中获得了更多的记录。我访问的数据库也在远程机器上。 请大家帮忙。 谢谢!     
已邀请:
根据您所描述的内容,我认为当集合遇到大量读取负载和写入负载时,我在PHP中遇到过这个问题。有些读取可能有效,但最终它们会开始计时。我的光标超时设置为30秒,这不是问题,因为我们使用Mongo进行后端数据挖掘/处理。我们已经能够通过分割我们的服务器来缓解这个问题,但问题仍然会定期出现。我认为这源于这样一个事实,即大多数Mongo都是单线程的,因此繁重的负载会变成一个长的处理队列,最终会变成超时。 我还要检查并确保您的RAM没有被索引数据或实际数据填满 - 如果是这种情况,Mongo必须转到硬盘来获取数据,这比从内存中读取的速度慢80倍。您可以通过对相关数据库运行
db.getStats()
来查看索引/数据占用量。     

要回复问题请先登录注册