【问题标题】:Proxy error while accessing the application访问应用程序时出现代理错误
【发布时间】:2012-02-02 18:09:51
【问题描述】:

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

代理错误 代理服务器从 上游服务器。代理服务器无法处理请求 GET /。

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

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

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

** 开始嵌套异常 **

java.net.SocketException MESSAGE:连接超时

堆栈跟踪:

java.net.SocketException:连接超时 在 java.net.SocketInputStream.socketRead0(本机方法) 在 java.net.SocketInputStream.read(SocketInputStream.java:146) 在 com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113) 在 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 毫秒前。

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

这是我从 Apache 代理日志中得到的信息

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

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

【问题讨论】:

  • "我必须重启网络服务器"
  • 是的,我自定义编写的网络服务器。

标签: java apache webserver


【解决方案1】:
  1. apache 代理失败,因为 customwebserver 没有响应。你的

  2. customwebserver 记录一个等待 mysql 响应的崩溃。重启

  3. customwebserver 修复了它,所以 mysql 不是问题。看起来您的 customwebserver 处理其与 mysql 的连接的方式存在问题。

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

【讨论】:

  • 我通过像这样的池使用 jdbc 连接 new Pool("jdbc:mysql://" + host + "/mydatabase?jdbcCompliantTruncation=false", "org.gjt.mm.mysql.Driver ", windows ? 2 : 20) 没有自动重新连接=true。我认为在连接池中使用自动重新连接不是一个好主意。
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

    我认为就像前面的答案所述,您遇到了由您的基础架构成员之一引发的超时:

    • 服务器
    • 网络设备(路由器很聪明,但防火墙也很聪明)

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

    HTH 杰罗姆

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 无论哪一个代理抱怨响应不佳。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多