0

我有一个非常奇怪的行为。

我正在为用户托管一个跟踪软件,主要记录移动流量。现在,路径如下:

1.我的客户获取了一个 php 代码片段来放入他的网站。

2.此代码将 cURL 帖子(基于预定义的帖子字段,如:visiotr IP、用户代理、主机等)发送到我的服务器。

3.我的服务器记录数据,并确定风险级别。

4.然后它向客户端服务器响应状态。也就是说,它将“真”或“假”发送回客户端服务器。

5.客户端服务器获得响应,并决定做什么(加载不同的 HTML 内容、重定向、阻止访问者等)。

我面临的问题是,出于某种原因,从我的客户端服务器向我的服务器发出的所有请求都被记录并存储在日志文件中,但我的客户端报告点击丢失,就好像我的服务器发回响应一样,但他们的服务器无法接收这些响应或其他东西。

我可能会注意到,每分钟都有来自不同客户的服务器以及每个客户自己的大量请求。

原因可能与 CURL_RETURNTRANSFER 没有得到任何响应有关吗?或者,问题可能是 cURL 过载?

我真的不知道。我的服务器非常快,并且只使用了 10% 的资源。

提前感谢您的想法。

4

1 回答 1

1

您触及了非常有问题的域 - 高负载服务器,您的问题可能出现在很多地方,因此您将不得不真正花时间修复它,或者至少部分修复它。

首先,你应该明白到底是怎么回事,看看这个简化的方案:

  1. 客户端的 php 代码尝试打开与您的服务器的连接,为此它通过网络向您的服务器发送一些数据
  2. 您的服务器(我想是 apache)尝试接受它,如果它有资源 - 检查 apache 配置中的最大连接属性
  3. 如果服务器可以接受连接,它会尝试创建新线程(或使用线程池中的一个)
  4. 线程启动后,它会运行您的 php 脚本
  5. 你的 php 脚本做了一些工作,连接到 db 并通过网络发回响应
  6. 客户端等待来自 p5 的回答或由于超时而关闭连接

所以,在每一点你都可能遇到瓶颈:

  1. 网络带宽
  2. 最大打开连接数
  3. 线程池大小
  4. 脚本执行时间
  5. 最大数据库连接、表锁、io 等待时间
  6. 客户端超时

而且它不是可能发生问题并最终导致空卷曲响应的可能位置的完整列表。

从一开始,我建议您将日志记录添加到 PHP 代码(客户端和服务器)并将所有 curl_error 问题存储在某个文本文件中,至少您会看到经常发生的问题。

于 2013-10-10T23:18:16.837 回答