我创建了一个用于生成图像文件的 PHP 脚本,现在我使用 IMagick、ImageMagick 的组合来生成 JPEG 图像文件。
现在的问题是,一次生成一组图像文件,每组包含4个图像文件(正面,背面,左侧,右侧)
现在通常正面图像文件的大小在 2Mb-4Mb 之间,而背面图像文件的大小在 1Mb-1.5Mb 之间,侧面的大小仅为 500Kb。
现在您可以看到文件大小很大,因为分辨率也很大,正面和背面都为 3600x3600,而侧面为 200x3600(WidthxHeight)
现在的问题是,有时用于生成这些文件的脚本运行得非常好,但在其他时候它只是停止而没有完全生成所有文件。
例如,有时它会创建所有 4 个文件,但在其他时候,它会在 Front Image 文件处停止,或者在创建 Front 之后它会在 Back Image 文件处停止。
当这种情况发生时,有时 apache 网络服务器会停止响应,我的意思是它只是挂断了,我必须通过 SSH 客户端重新启动它。
我对 PHP-Apache-MySQL 平台相当陌生,所以我还在学习,所以如果我犯了一些愚蠢的错误,我深表歉意,但我不知道发生了什么或为什么会发生。
我假设问题可能是由于 WebServer 过载,因为服务器需要 4-5 秒来生成正面图像文件,然后需要 2-3 秒来生成背面图像文件,大约需要 1 秒来生成每个侧面图像文件。
因此,如果是由于 WebServer 过载,有人可以告诉我如何避免它吗???
另外在 php.ini 文件中设置缓冲区的目的是什么,我的意思是当服务器过载时这会影响结果吗???
抱歉,我忘了提到我还检查了错误日志,那里没有错误,执行时间设置为 60 分钟,此特定脚本的最大内存使用量设置为 512Mb。
问题是这个问题很少见,我的意思是脚本在 10 次中有 8 次执行得非常好。所以这里没有模式,它是完全随机的。
这个脚本也在后台运行,我的意思是其他一些脚本向图像生成脚本发出异步 AJAX 请求,图像生成脚本只是在生成图像文件的后台运行,它不返回任何输出,它也忽略任何 user_abort,因此一旦向Image Generation Script发出 AJAX 请求,用户就可以自由关闭浏览器。
是的,我尝试通过在浏览器窗口的新选项卡中运行它来在前台运行此脚本,如果脚本完全运行,则没有按预期输出,只有当我检查文件时,所有 4 个文件都以完整的形式存在.
但是当出现错误时,我只是在我的 FireFox 浏览器上收到一条消息,表明与服务器的连接已被重置(此消息由 FireFox 给出,而不是由我的 FireFox 格式的代码给出),之后当我检查文件时我看到只创建了 4 个文件中的一些。此脚本的超时时间也设置为 60 分钟。FireFox 连接重置错误会在 2 分钟内显示。PHP.ini 中的 max-timeout 设置为 30 分钟。
此外,如果脚本需要 2 分钟的时间来完成它的工作,它并不总是会产生问题,有时脚本需要 3-4 分钟的时间,但会完成工作,有时它会在 10-20-30 秒后停止工作,所以这是非常随机的。我多次检查代码,这里没有任何问题,因为如果是这样,那么这个问题的频率会高得多,现在只有 10-20% 的时间。