谈MongoDB读取连接超时的异常

今天在现场的哥们发来异常,让我解决,错误信息如下:

HTTP Status 500 - Read operation to server 192.168.1.110:20001 failed on database wpdb; nested exception is com.mongodb.MongoException$Network: Read operation to server 192.168.1.110:20001 failed on database wpdb

--------------------------------------------------------------------------------

type Exception report

message Read operation to server 192.168.1.110:20001 failed on database wpdb; nested exception is com.mongodb.MongoException$Network: Read operation to server 192.168.1.110:20001 failed on database wpdb

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.springframework.dao.DataAccessResourceFailureException: Read operation to server 192.168.1.110:20001 failed on database wpdb; nested exception is com.mongodb.MongoException$Network: Read operation to server 192.168.1.110:20001 failed on database wpdb
	org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:56)
	org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1913)
	org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1743)
	org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1557)
	org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:497)
	com.geoway.ime.tile.dao.impl.TileDaoImpl.getTile(TileDaoImpl.java:60)
	com.geoway.ime.tile.service.impl.TileServiceImpl.getTile(TileServiceImpl.java:105)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
	org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	org.springframework.cache.interceptor.CacheInterceptor$1.invoke(CacheInterceptor.java:58)
	org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:211)
	org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:66)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	com.sun.proxy.$Proxy50.getTile(Unknown Source)
	com.geoway.ime.server.rest.TileServer.getTileKVP(TileServer.java:60)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
	com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
	com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)

root cause 

com.mongodb.MongoException$Network: Read operation to server 192.168.1.110:20001 failed on database wpdb
	com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:308)
	com.mongodb.DBTCPConnector.call(DBTCPConnector.java:279)
	com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84)
	com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:66)
	com.mongodb.DBCollection.findOne(DBCollection.java:870)
	com.mongodb.DBCollection.findOne(DBCollection.java:844)
	com.mongodb.DBCollection.findOne(DBCollection.java:790)
	org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:1980)
	org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:1965)
	org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1739)
	org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1557)
	org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:497)
	com.geoway.ime.tile.dao.impl.TileDaoImpl.getTile(TileDaoImpl.java:60)
	com.geoway.ime.tile.service.impl.TileServiceImpl.getTile(TileServiceImpl.java:105)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
	org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	org.springframework.cache.interceptor.CacheInterceptor$1.invoke(CacheInterceptor.java:58)
	org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:211)
	org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:66)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	com.sun.proxy.$Proxy50.getTile(Unknown Source)
	com.geoway.ime.server.rest.TileServer.getTileKVP(TileServer.java:60)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
	com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
	com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)

root cause 

java.net.SocketTimeoutException: Read timed out
	java.net.SocketInputStream.socketRead0(Native Method)
	java.net.SocketInputStream.read(SocketInputStream.java:129)
	java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
	java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
	java.io.BufferedInputStream.read(BufferedInputStream.java:317)
	org.bson.io.Bits.readFully(Bits.java:48)
	org.bson.io.Bits.readFully(Bits.java:35)
	org.bson.io.Bits.readFully(Bits.java:30)
	com.mongodb.Response.<init>(Response.java:42)
	com.mongodb.DBPort$1.execute(DBPort.java:141)
	com.mongodb.DBPort$1.execute(DBPort.java:135)
	com.mongodb.DBPort.doOperation(DBPort.java:164)
	com.mongodb.DBPort.call(DBPort.java:135)
	com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:300)
	com.mongodb.DBTCPConnector.call(DBTCPConnector.java:279)
	com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84)
	com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:66)
	com.mongodb.DBCollection.findOne(DBCollection.java:870)
	com.mongodb.DBCollection.findOne(DBCollection.java:844)
	com.mongodb.DBCollection.findOne(DBCollection.java:790)
	org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:1980)
	org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:1965)
	org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1739)
	org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1557)
	org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:497)
	com.geoway.ime.tile.dao.impl.TileDaoImpl.getTile(TileDaoImpl.java:60)
	com.geoway.ime.tile.service.impl.TileServiceImpl.getTile(TileServiceImpl.java:105)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
	org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	org.springframework.cache.interceptor.CacheInterceptor$1.invoke(CacheInterceptor.java:58)
	org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:211)
	org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:66)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	com.sun.proxy.$Proxy50.getTile(Unknown Source)
	com.geoway.ime.server.rest.TileServer.getTileKVP(TileServer.java:60)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
	com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
	com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
	com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
	com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
	com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
	com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
	com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
	com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
	com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
	com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.41 logs.

  由异常来看,是由于MongoDB连接超时造成的。于是,往MongoDB上找原因。首先上MongoDB的配置文件:

mongodb.replica-set=192.98.12.242:30007,192.98.12.245:30007
mongodb.hostname=192.98.12.245
mongodb.port=30007
mongodb.connections-per-host=1000
mongodb.threads-allowed-to-block-for-connection-multiplier=200
mongodb.connect-timeout=2000
mongodb.max-wait-time=2000
mongodb.auto-connect-retry=true
mongodb.socket-keep-alive=true
mongodb.socket-timeout=1500
mongodb.slave-ok=true
mongodb.write-number=1
mongodb.write-timeout=1000
mongodb.write-fsync=true
mongodb.dbname=shardvectordb
mongodb.dbuser=
mongodb.dbpassword=

  连接时间2秒。然后在定位mongodb的查询,结果为6、7秒。原来是这个原因。然后定位,一个查询为什么耗时那么久呢?

经过排查,原来是查询字段没有创建索引。然后把索引创建,查询几十毫秒,ok问题全部解决。

时间: 2024-08-10 00:07:18

谈MongoDB读取连接超时的异常的相关文章

一段mongodb服务器读取数据超时的故事

北京时间 2016年9月25日  22:58:30 PM 近期线上生产环境mongodb的总是发现读取数据超时的问题,今天下午坐下来细细的研究了一番,大致过程如下: 业务背景 线上有一对mongodb主从的服务器,只是简单做了mongodb的主从,master - slave. 开始以为做了主从就能确保数据不丢的问题了,确实,数据没有发生丢失的问题,但是近期发现好多用户在点击某些操作要读取mongo里面的数据内容的时候,要等待很长的时间,这样的等待是叫人无法忍受的. 最开始的时候,以为做了主从,

FileZilla MLSD错误:连接超时、读取目录列表失败

昨天更换完主机后,用FileZilla ftp客户端连接ftp服务器,出现以下错误: 命令: MLSD错误: 连接超时错误: 读取目录列表失败 于是网上百度了一下,找到两种解决方法. 1. 将filezilla的模式更改成主动模式(PORT Mode) 原理(网上复制的)FTP协议的数据传输存在两种模式:主动模式(PORT Mode)和被动模式(Passive Mode).这两种模式发起连接的方向截然相反,主动模式是从服务器端向 客户端发起:被动模式是客户端向服务器端发起连接.是否采取被动模式取

XML 解析 连接超时

本文转载自: http://blog.csdn.net/chjttony/article/details/7720873 说在前面 读取XML的时候,很多人总是不明白为什么会连接超时,XML解析怎么还会访问网络,其实在XML解析之前,如果XML指定了DTD文件,那么Java会根据DTD文件的路径去本地寻找或远程下载,下载的时候就会出现连接超时!所以想要避免连接超时这个问题,就可以采用避免DTD下载,下面通过两种方式避免DTD下载,本人亲测,确实是一篇好文章,谢谢作者! 下面是正文: Java程序

MongoDB的连接字符串

本文导读:MongoDB数据库与传统的关系型数据库相比,它具有操作简单.完全免费.源码公开等特点,这使MongoDB产品广泛应用于各种大型门户网站和专业网站.由于MongoDB连接并不支持HTTP协议,所有你不能直接通过浏览器访问MongoDB,下面详细介绍MongoDB中连接字符串的编写 一.MongoDB连接字符串常用格式 mongodb://[username:[email protected]]host1[:port1][,host2[:port2],…[,hostN[:portN]]]

mongo 自动创建索引导致应用连接超时

2016年10月16日一个周末的时光遇到了一个很是让人恼火的问题!tomcat总是抛出连接超时问题错误,让人甚是恼火啊!!! 报错信息如下: [2016-10-15 18:30:58] 113578459   INFO - ----- PermissionsInterceptor ----- - 登录人pin--------WUJIE 十月 15, 2016 6:30:58 下午 com.mongodb.DBApiLayer$Result killCursor 警告: can't clean 1

redis远程连接超时

 今天在用jedis连接远程的redis时,抛出连接超时异常:connect timed out.具体信息如下: Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out at redis.clients.jedis.Connection.connect(Connectio

大数据导致DataReader.Close超时的异常

公司一个数据抓取的程序,数据量极大,读取数据的用IDataReader的Read方法来进行数据处理,在测试的时候我想跑一部分数据后跳出循环,即break; 然后关闭datareader,但是在执行datareader.close()方法的时候出现了“超时异常”的错误, 查看了一下MSDN对Close方法的说明的备注 如下: 当使用 SqlDataReader 将关联的 SqlConnection 用于任何其他用途时,必须显式调用 Close 方法. Close 方法填写输出参数的值.返回值和 R

Hibernate+C3P0下连接超时总结

最近后台总是会遇到当几个游戏区并发通知后台写入统计数据时,发生连接已超时的问题,抛出如下异常,导致一些统计数据未有写进去. Mysql服务器默认的"wait_timeout"是8小时[也就是默认的值默认是28800秒],也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection,通俗的讲就是一个连接在8小时内没有活动,就会自动断开该连接. wait timeout的值可以设定,但最多只能是2147483,不能再大了.也就是约24.85天 这个参数大致的

关于MySQL的wait_timeout连接超时问题报错解决方案

bug回顾 : 想必大家在用MySQL时都会遇到连接超时的问题,如下图所示: ### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 47,795,922 milliseconds ago. The last packet sent successfully to the server was 47,7