访问应用程序时出现代理错误

时间:2012-01-04 20:39:48

标签: java apache webserver

我在浏览器和自定义Web服务器之间有一个apache代理。因此,在启动网络服务器后,我可以访问我的网络应用程序4-5个小时。之后我收到此错误

  

代理服务器错误代理服务器收到了来自的无效响应   上游服务器。代理服务器无法处理请求GET /.

     

原因:从远程服务器读取错误

要再次访问Web应用程序,我必须重新启动Web服务器。我试图检查我从我的网络服务器得到的日志,只有该日志中的错误,我发现是这个

  

com.mysql.jdbc.CommunicationsException:通信链接失败   由于潜在的例外:

     

**开始没有异常**

     

java.net.SocketException消息:连接超时

     

堆栈跟踪:

     

java.net.SocketException:连接超时           在java.net.SocketInputStream.socketRead0(本机方法)           在java.net.SocketInputStream.read(SocketInputStream.java:146)           在com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)           at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)           在com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)           在com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1910)           在com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)           在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)           在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)           在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)           在com.mysql.jdbc.Connection.execSQL(Connection.java:3170)           在com.mysql.jdbc.Connection.execSQL(Connection.java:3099)           在com.mysql.jdbc.Statement.execute(Statement.java:695)           在hra.database.Pool.getConnection(Pool.java:62)

     

**结束了例外**

     

发送到服务器的最后一个数据包是925624 ms前。

我试图修复此数据库错误,但我仍然得到上面提到的代理错误,所以肯定日志信息没用。

这是我从Apache代理日志中获取的内容

  

(70007)指定的超时已过期:proxy:错误读取状态   来自远程服务器的行

有谁知道可能是什么问题或任何有用的指针来解决这个问题?

4 个答案:

答案 0 :(得分:1)

可能发生的情况是您的上游服务器由于不活动而自行关闭。在服务器上找到控制该设置的设置并将其打开。

答案 1 :(得分:1)

我可以看到您看到两个连接超时错误

  • Apache Proxy Web服务器在连接到自定义Web服务器时超时
  • 自定义Web服务器在连接到数据库时超时

如果在代理服务器上设置的超时小于而不是为数据库连接设置的超时,则在数据库连接超时之前,代理服务器也会超时。

  • 首先解决所有数据库连接问题并通过直接连接到自定义Web服务器(而不是通过代理)来测试您的应用程序。
  • 观察并确定正常响应时间和最长响应时间。
  • 将代理超时ProxyTimeout设置为超过(最长响应时间)+(网络延迟)的值

如果可能,您可以共享代理服务器配置以帮助您进一步。

答案 2 :(得分:1)

  1. apache代理失败,因为customwebserver没有回答。您的
  2. customwebserver记录等待mysql回答的崩溃。重新启动
  3. customwebserver修复它,所以mysql不是问题。看起来问题就像你的customwebserver处理它与mysql的连接一样。

    我们可以看到你的jdbc配置吗?你有autoReconnect = true吗?

答案 3 :(得分:0)

我认为,如前一个答案所述,您遇到基础架构成员之一提出的超时时间:

  • 服务器
  • 网络设备(路由器是聪明的野兽,但防火墙也可以聪明)

您是否设置了真正的连接池?使用心跳机制保持活跃的连接? 这会引起一些网络流量,但避免了这样的问题? 尝试使用网络捕获工具来分析许多日志

HTH 杰罗姆