php excel 导出问题整理
一、服务器内存不足
-
mysql查询的数据量过大, 造成mysql内存溢出
-
mysql查询数据返回给php时,php将数据存储在变量中(内存中),php所在服务器内存不足
-
内存导致的问题,基本上响应都非常的迅速,在1-3秒内就能响应错误信息
二、响应超时
-
mysql查询超时,查询的数据较多,慢sql查询,多表连接查询,mysql响应太长,php等待时间超时
-
客户端等待响应超时, 当将数据写入excel文件时间超过了php或者nginx配置的等待响应超时时间
-
php执行超时,当写入文件时间过长,php默认超时时间为30秒,当执行时间超过后报错,max_execution_time
三、php或者liunx分配内存不足
-
使用top命令查看 服务器可用内存大小
-
php设置的内存小于文件执行内存,或者文件读取的内存
-
如果使用docker或者虚拟机,查看分配的内存大小和内存使用情况
-
php 内存空间设置 output_buffering,在php.ini中默认为 4k
四、问题排查
-
排查mysql执行时间和数据大小,一般几M以内没有问题
-
服务器内存检查,使用top命令查看服务器内存大小
-
查看mysql 响应时间,如果是慢sql 建议使用分页查询
-
php响应时间是否设置 max_execution_time
-
nginx 超时时间设置 client_header_timeout 、client_header_timeout 、client_header_timeout 、keepalive_timeout
-
php 缓冲内存设置 output_buffering,在php.ini中默认为 4k
五、excel执行方案
-
php提供分页查询结果,前端拿到数据后写入excel,此方案适用于数据量不大的情况,如果客户的服务器太差,可能会造成电脑卡死或者浏览器卡死,对于开发人员比较快速和方便,建议写入的数据不超过5000条
-
异步写入excel,先执行分页查询数据,将数据写入redis, 然后php执行异步任务,将数据分多次写入excel,比如一次写入 100条,数据写入完成后返回下载链接给客户端浏览器, 缺点:当数据量大时,由于先生成了excel, 每次写入都需要打开文件流,后续的每一次写入都会占用内存和服务器,容易造成服务器响应缓慢,特别是下载任务量大时,可能会宕机,建议写入的数据不超过1万条
-
异步excel压缩下载,在异步写入的基础上, 将excel文件分为多个,最后将文件进行压缩,返回压缩包链接下载
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)