谈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问题全部解决。

转载于:https://www.cnblogs.com/likehua/p/3979830.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用中提到的信息,导致mongodb请求超时的原因可能是磁盘I/O堵塞。当mongodb的写操作非常频繁时,可能会导致磁盘无法及时处理所有的写入请求,从而造成读取操作的延迟。此外,如果java程序没有对mongodb的读写操作进行适当的分离,也可能导致请求超时的问题。因此,为了解决mongodb请求超时的问题,可以考虑以下几个方法: 1. 优化写入操作:减少频繁的写入操作,可以通过批量写入或者设置写入的间隔时间来减轻磁盘负载,以提高写入效率。 2. 优化磁盘I/O性能:可以考虑使用更快速的磁盘或者使用固态硬盘(SSD)来提升磁盘的读写速度,从而减少磁盘I/O堵塞。 3. 实施读写分离:将读操作和写操作分别分配给不同的mongodb实例,以减轻单个实例的负载压力,从而提高整体的读写性能。 4. 调整mongodb的配置参数:可以根据实际情况调整mongodb的配置参数,如增加缓存大小、提高线程池大小等,以优化其性能和响应能力。 综上所述,为了解决mongodb请求超时的问题,可以采取以上的方法来优化写入操作、提升磁盘I/O性能、实施读写分离和调整配置参数等。这样可以提高mongodb的性能和响应能力,从而减少请求超时的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [一段mongodb服务器读取数据超时的故事](https://blog.csdn.net/weixin_30632089/article/details/96990621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值