卷曲返回间歇性 "Failed connect - no error"

Curl returning intermittent "Failed connect - no error"

我们在公司网络中的非面向 Internet 的服务器上有两个应用程序。一个应用程序(客户端应用程序)通过 API.

从另一个应用程序(服务器应用程序)获取数据

客户端应用程序使用 PHP 库 Jyggen\Curl 调用 API。周五,用户开始报告客户端应用程序出现错误。当我检查错误日志时,我可以看到 Curl 请求间歇性地失败并出现以下错误:

Failed connect to server-app:80; no error

我自己通过点击客户端应用程序中的不同页面能够重现这一点 - 最终 API 调用会失败并且 PHP 库会抛出异常。该错误今天仍在继续,我也能够使用 curl.exe 从命令行重现它 - 我必须执行命令 10-15 次才能得到错误,但它最终还是发生了。

服务器应用程序也可以由用户在他们的浏览器中直接访问(以及 API),我们在那里没有遇到任何问题。

就客户端应用程序的使用而言,Curl 错误似乎发生在一天中最繁忙的时段(英国时间上午 9 点至下午 3 点)。 IIS 上的两个应用程序 运行 并允许足够的最大并发用户数。

我目前的两个理论是:

  1. 网络问题 - 但是公司 IT 看不出有什么问题
  2. Curl 问题 - 关于一次可以发出多少 Curl 请求,有什么我不知道的吗?在过去的几个月里,我们的用户数量一直在稳步增长,所以也许我们才刚刚达到它开始引起问题的临界点?如果相关的话,我们不会使用 curl_multi。

接下来要检查的任何提示/想法将不胜感激。

更新

我今天早上在我的浏览器中重现了这个错误。我检查了 IIS 日志,我是当时唯一使用客户端应用程序的人(没有其他人使用它超过 10 分钟)。因此,我想建议客户端应用程序上的流量不是一个因素。

(为什么人们坚持在过于复杂的 OO 中包装完美合理的 API?)

这不是一个真正的编程问题 - 它是关于故障查找和很可能是一些与基础设施相关的问题。

如果客户端连接失败,则连接被拒绝或超时。您应该有足够的信息来确定哪些适用于此处。

如果连接被拒绝,则不会有明显的延迟。您需要查看拒绝连接的原因(在没有代理或 IPS 的情况下,这将是 IIS 实例)并找出原因。

如果连接超时,则问题可能是网络上的数据包丢失或远程服务器上的问题。增加连接超时将有助于后者。开始收集客户端连接所需的时间并查看是否存在任何模式(检查与其他事件(如备份)的相关性)。如果没有任何明显的 pattern/increasing 超时没有帮助,那么这是一个丢包问题。