php - 生成大文件时如何解决 PHP 中的“分段失败”?
问题描述
我在不同的论坛中阅读了很多关于此错误的信息,但仍然找不到解决方案
我的生产服务器目前有:
阿帕奇:2.4.25 PHP:5.6.40
使用1.8.2版本的PHPSpreadsheet库,生成不同的Excel文件;由于不同的原因(大量信息和样式应用于单元格表),在相当长的执行时间(可以达到 30/40 分钟)中导出最大 3MB 的 xlsx 文件。
所有这一切都奏效了,直到我们移动并 dockerized 到我们的新服务器,它的操作系统是 CentOS7,并且有一个用于 apache、php 和另一个用于 mysql 的 docker。
现在,当生成这些“大”文件时,error.log 跟踪显示以下错误:[core: notice][pid 8] AH00052: child pid 15829 exit signal Segmentation fault (11)
我试图在我的本地机器上使用虚拟机复制错误,在另一台机器上,我将 OS centos7 和 dockerized 放在它们上,我什至从生产服务器复制了相同的配置文件,但是,在这些机器上,错误没有出现并且允许我正确下载。
目前我很绝望,在生产线上尝试任何解决方案之前,我已经反向尝试了每个互联网解决方案来复制错误,但这个错误绝不会被复制。
我感谢任何信息和正义事业的帮助......我知道此时 php 5.6 已被发送到收集,但如果最终它无法解决此事件,我无法将工作时间提交给更新。
解决方案
似乎是一个可能的解决方案,并且绝对是一个优化,将摆脱让httpd
孩子被绑在任何运行那么长时间的东西上。我希望这样的事情会失败。想要使这个请求超时的事情的数量很长。我的意思是用户在那里坐了 40 分钟?
让您的 Web 界面触发 PHP 脚本 (CLI) 怎么样?
exec('php slowasf.php arg1 arg2 >/dev/null 2>/dev/null &');
可以查看消息队列以跟踪进度。更多的长评论可能比答案。但是你的问题缺少代码!
最后,您是否尝试过给它更多的内存?
推荐阅读
- javascript - 在箭头函数中使用 name=arguments 作为函数参数是一种好习惯吗?
- python - 是否可以在 html 中添加 python 脚本?
- amazon-web-services - Terraform:Route53 A 和 AAAA 在同一记录中?
- angular - 将物化添加到 Angular 8 不起作用
- influxdb - Influx 查询中的语法错误,将数据从 influx 提取到 csv
- vb.net - 指纹机设置
- azure - 如何使用 HttpSys 在本地计算机上为 Azure Service Fabric 创建 https 端点?
- javascript - 如何通过向文本框提供输入来替换文本区域中的 JSON 文本值
- opencv - 使用 Android NDK 对 'cv::imwrite 的未定义引用
- android - Android:处理在viewpager内的片段中加载数据