【问题标题】:Redis Connection Exception when used as a Session manager for Tomcat 7用作 Tomcat 7 的会话管理器时 Redis 连接异常
【发布时间】:2013-08-11 01:11:38
【问题描述】:

我在远程服务器上运行了一个 redis,并且另一个 Web 应用程序能够毫无问题地连接到它。我使用 redis 作为会话存储,当我尝试连接多个 tomcat 实例时,它会抛出下面提到的错误:-

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    at redis.clients.util.Pool.getResource(Pool.java:22)
    at com.radiadesign.catalina.session.RedisSessionManager.acquireConnection(RedisSessionManager.java:111)
    at com.radiadesign.catalina.session.RedisSessionManager.loadSessionFromRedis(RedisSessionManager.java:391)
    at com.radiadesign.catalina.session.RedisSessionManager.findSession(RedisSessionManager.java:325)
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2865)
    at org.apache.catalina.connector.Request.getSession(Request.java:2316)
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:898)
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229)
    at org.springframework.web.context.request.ServletRequestAttributes.updateAccessedSessionAttributes(ServletRequestAttributes.java:221)
    at org.springframework.web.context.request.AbstractRequestAttributes.requestCompleted(AbstractRequestAttributes.java:48)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:954)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.tcs.com.security.filter.SecurityInterceptor.doFilter(SecurityInterceptor.java:59)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at com.radiadesign.catalina.session.RedisSessionHandlerValve.invoke(RedisSessionHandlerValve.java:26)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
    at redis.clients.jedis.Connection.connect(Connection.java:134)
    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:69)
    at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1665)
    at redis.clients.jedis.JedisPool$JedisFactory.makeObject(JedisPool.java:72)
    at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1188)
    at redis.clients.util.Pool.getResource(Pool.java:20)
    ... 33 more
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at redis.clients.jedis.Connection.connect(Connection.java:129)
    ... 38 more 

我无法理解这个问题。我正在使用tomcat-redis-session-manager 这适用于 Web 应用程序的一个实例,但是当我移动到多个实例时,我得到了上述错误。请建议如何相处?

【问题讨论】:

  • 在mac上使用5位端口号像27017这样有效吗??对于 Redis?

标签: java spring tomcat redis tomcat7


【解决方案1】:

您对某处的连接数有限制。检查您的客户端和服务器限制设置以打开文件句柄。

【讨论】:

    【解决方案2】:

    其实问题是通过为redis配置一个conf文件解决的。我为此添加了一些适当的参数,还添加了大约 5 个客户端,然后它就开始了。 :)

    【讨论】:

    • 您介意澄清添加/更新了哪些“适当的参数”吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多