我有一个 PHP 文件,通过 Nginx 服务器和 PHP-FPM 生成大量 JSON(~1.5 MB),运行在 macOS 上。
偶尔(约占请求的 2%),输出的 JSON 会损坏。主体的长度始终相同,但看起来好像各种字节块(可能长度不同)被重新排序,从而导致损坏。
在以下情况下不会发生随机损坏:
- 无需 PHP,直接通过 Nginx 提供相同但静态的 JSON 文件。
- 使用命令行直接从 PHP 生成 JSON。
在以下情况下,仍会发生随机损坏:
- 让 PHP 拥有
readfile
静态 JSON 文件,而不是动态生成 JSON 本身。 - 其他脚本生成通过 PHP 发送的大量数据,即使它不是 JSON。
Nginx 或 PHP-FPM 日志中没有错误,其他一切似乎都正常工作。Nginx 和 PHP 是通过 Homebrew 安装的,通常配置为最新版本(尽管我已经处理这种损坏问题一年左右了):
nginx 版本:nginx/1.17.3
PHP 7.1.23 (fpm-fcgi)(构建于:2019 年 2 月 22 日 22:19:35)
我该如何调试这个问题,或者我可以尝试一些配置来看看是否能修复它?
答案1
我不知道为什么,但我能够通过为 FastCGI 连接切换到 TCP 上的 Unix 套接字来解决问题。看起来好像某个地方有错误,但我不知道该怪谁!