mongodb 查询超时异常 sockettimeoutexception
在对超过百万条记录的集合进行聚合操作。
dbobject match=(dbobject)json.parse({$match:{logtype:{'$in':[5,9]}}});
dbobject group=(dbobject)json.parse({$group:{'_id':'$domainurl','count':{'$sum':1}}});
aggregationoutput output = logcollection.aggregate(match,group);
偶尔会发生read timed out 异常。
com.mongodb.mongoexception$network: read operation to server /192.168.10.202:27017 failed on database adlogtable
at com.mongodb.dbtcpconnector.innercall(dbtcpconnector.java:253)
at com.mongodb.db.command(db.java:261)
at com.mongodb.db.command(db.java:243) ...
caused by: java.net.sockettimeoutexception: read timed out
at java.net.socketinputstream.socketread0(native method)
at java.net.socketinputstream.read(socketinputstream.java:152)
通过多次测试,发现执行一次聚合平均时间为5s,超过5s时就会报错!
然后查看mongodb的配置信息:
socket-timeout=5000 //5s
socket-timeout的默认配置为0,也就是没有限制。
没有超时限制,,系统出了问题也不容易发现,应该根据实际情况,给出合理的超时时间。
通过多次测试发现最长执行时间为6秒,就把超时时间设置成了10000。
socket-timeout=10000 //10s
注意:mongodb在与spring整合时,如果要配置多个mongdb源,只会启用最后一个配置。
应该把参数配置信息存储在properties文件中。
threads-allowed-to-block-for-connection-multiplier=100
connect-timeout=1000
max-wait-time=1000
auto-connect-retry=true
socket-keep-alive=true
socket-timeout=10000
slave-ok=true
write-number=1
write-timeout=0
write-fsync=true />
通过java api获取配置参数
dbcollection logcollection = mongotemplate.getcollection(collname);
mongooptions mongooptions = logcollection.getdb().getmongo().getmongooptions();
system.out.println(mongooptions.getsockettimeout());
最后一点: connectiontimeout和sockettimeout的区别:
一次完整的请求包括三个阶段:1、建立连接 2、数据传输 3、断开连接
如果与服务器(这里指数据库)请求建立连接的时间超过connectiontimeout,就会抛 connectiontimeoutexception,即服务器连接超时,没有在规定的时间内建立连接。
如果与服务器连接成功,就开始数据传输了。
如果服务器处理数据用时过长,超过了sockettimeout,就会抛出sockettimeoutexceptin,即服务器响应超时,服务器没有在规定的时间内返回给客户端数据。
centos 编译安装 mongodb与mongodb的php扩展
centos 6 使用 yum 安装mongodb及服务器端配置
ubuntu 13.04下安装mongodb2.4.3
mongodb入门必读(概念与实战并重)
ubunu 14.04下mongodb的安装指南
《mongodb 权威指南》(mongodb: the definitive guide)英文文字版[pdf]
nagios监控mongodb分片集群服务实战
基于centos 6.5操作系统搭建mongodb服务
mongodb 的详细介绍:请点这里
mongodb 的下载地址:请点这里
本文永久更新链接地址: