PHP 脚本有时需要等待 20-30 分钟才能启动

PHP 脚本有时需要等待 20-30 分钟才能启动

我的服务器上有一个 PHP 脚本,主要用于从上传中获取文件并将其移动到位。它通常运行良好,但偶尔,脚本会在 20-30 分钟内无法启动。在等待期间,所有上传的文件(大约 0.5 MB)将保留在 tmp 文件夹中,因此数据传输似乎已完成。以下是 Apache 访问日志的摘录,表明脚本已收到 POST(来自 Android 应用程序).​​..

[29/Nov/2011:11:21:55 -0500] "POST /submit.php HTTP/1.1" 200 288 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)"

但是,直到 11:43 左右,该条目才出现在访问日志中,周围是来自 11:43:42 和 12:00:02 的其他页面请求。这让我相信该条目直到脚本执行时才会写入,但它是在提交时写入的。这是错误日志,我正在其中写入来自脚本的事件...

[Tue Nov 29 11:43:19 2011] Script started: Nov 29, 2011 11:43:19
[Tue Nov 29 11:43:19 2011] Audio file provided
[Tue Nov 29 11:43:19 2011] Timestamp provided
[Tue Nov 29 11:43:19 2011] Defaults set
[Tue Nov 29 11:43:19 2011] Connected to database
[Tue Nov 29 11:43:19 2011] Database selected
[Tue Nov 29 11:43:19 2011] Query successful
[Tue Nov 29 11:43:19 2011] 551: ID set
[Tue Nov 29 11:43:19 2011] 551: Audio file moved
[Tue Nov 29 11:43:19 2011] 551: Algorithm succeeded
[Tue Nov 29 11:43:19 2011] 551: Algorithm query succeeded
[Tue Nov 29 11:43:19 2011] 551: Photo type identified
[Tue Nov 29 11:43:20 2011] 551: Photo and thumbnail saved
[Tue Nov 29 11:43:20 2011] 551: Cache cleared
[Tue Nov 29 11:43:20 2011] Script finished: Nov 29, 2011 11:43:20

知道什么原因会导致 PHP 脚本长时间无法执行吗?或者我应该设置哪种日志来找出原因?服务器正在运行Ubuntu 10.04Apache 2.2.14PHP 5.3.2

答案1

您对 Apache 写入日志文件的方式的看法完全正确。时间戳是在子进程接受连接时设置的,但直到发送响应后才写入日志文件。这可能会导致日志文件中的时间戳完全乱序。

脚本本身的日志显示它在初始连接建立后 22 分钟才开始运行,这意味着这是 Apache 的事情而不是 PHP 的事情。

我的第一个猜测是数据上传需要 20 分钟。0.5MB 通常不会花那么长时间,而且您说整个文件似乎在那里待了整整 20 分钟,所以这可能不是我们的问题。

下一个猜测是上传不完整或上传完整但没有迹象表明已完成。

如果 Android 应用程序未设置或错误地设置了 Content-Length: 标头,我不知道 Apache 如何知道何时开始处理数据。

如果 Android 用户超出信号范围,TCP 连接可能会保持打开状态相当长一段时间。

尝试更仔细地查看所涉及的时间的最佳方法是运行tcpdump服务器上的程序,并查看请求的不同部分到达的确切时间。我希望这不是一个特别繁忙的服务器。显然,您越能将其限制为您想要的流量,效果就越好。确保使用该-w选项,这样一旦您知道哪个 IP 地址导致了问题,您就可以重新读取文件并仅过滤掉该 IP 地址的流量。

相关内容