php excel 导出问题整理

一、服务器内存不足

  1. mysql查询的数据量过大, 造成mysql内存溢出

  2. mysql查询数据返回给php时,php将数据存储在变量中(内存中),php所在服务器内存不足

  3. 内存导致的问题,基本上响应都非常的迅速,在1-3秒内就能响应错误信息

 

二、响应超时

  1. mysql查询超时,查询的数据较多,慢sql查询,多表连接查询,mysql响应太长,php等待时间超时

  2. 客户端等待响应超时, 当将数据写入excel文件时间超过了php或者nginx配置的等待响应超时时间

  3. php执行超时,当写入文件时间过长,php默认超时时间为30秒,当执行时间超过后报错,max_execution_time

 

三、php或者liunx分配内存不足

  1. 使用top命令查看 服务器可用内存大小

  2. php设置的内存小于文件执行内存,或者文件读取的内存

  3. 如果使用docker或者虚拟机,查看分配的内存大小和内存使用情况

  4. php 内存空间设置 output_buffering,在php.ini中默认为 4k

 

四、问题排查

  1. 排查mysql执行时间和数据大小,一般几M以内没有问题

  2. 服务器内存检查,使用top命令查看服务器内存大小

  3. 查看mysql 响应时间,如果是慢sql 建议使用分页查询

  4. php响应时间是否设置 max_execution_time

  5. nginx 超时时间设置 client_header_timeoutclient_header_timeoutclient_header_timeoutkeepalive_timeout

  6. php 缓冲内存设置 output_buffering,在php.ini中默认为 4k

 

五、excel执行方案

  1. php提供分页查询结果,前端拿到数据后写入excel,此方案适用于数据量不大的情况,如果客户的服务器太差,可能会造成电脑卡死或者浏览器卡死,对于开发人员比较快速和方便,建议写入的数据不超过5000条

  2. 异步写入excel,先执行分页查询数据,将数据写入redis, 然后php执行异步任务,将数据分多次写入excel,比如一次写入 100条,数据写入完成后返回下载链接给客户端浏览器, 缺点:当数据量大时,由于先生成了excel, 每次写入都需要打开文件流,后续的每一次写入都会占用内存和服务器,容易造成服务器响应缓慢,特别是下载任务量大时,可能会宕机,建议写入的数据不超过1万条

  3. 异步excel压缩下载,在异步写入的基础上, 将excel文件分为多个,最后将文件进行压缩,返回压缩包链接下载

  4. 异步其它语言 excel写入(java、go、python),此种方法仅供参考

posted @   华叔92  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示