php phpexcel导文件爆500(爆内存) && 应对

      • 场景
      • 分析
      • 解决

场景

  • 开发环境
    • 公司使用的php版本的是 5.5.30, 这一点必须吐槽(万年不变的版本 …哭), 升级是不可能升级的,这辈子都不可能
    • 因为PHP版本的限制 所以使用的是PHPOffice/PHPExcel
    • centos(7.0) 8核8G
    • 前端使用的 fileDownload插件
    • 已经设置set_time_limit(0)
  • 事件
    • 统计数据导出excel 在数据量大的时候 , 会报’500’的错误

分析

  • 排除代码的问题
    • 代码层面补充了两个之前没有try catch 去捕捉异常抛出; 但是无果
  • debug位置
    • log各部分发生的时间,发现数据获取代码是很快的且可以正常运行 所以问题出在生成excel
    • 而excel部分可能出什么问题呢? 内存 && CPU
      • excel 一个cell 占据1k的内存, 我的cell 13502*37 = 500M(将近) 而我的php.ini memory_limit='500M'
        现在已经找到问题的所在, 但是还需要确认下
        • htop 找到进程 , 哈果然内存瞟了起来

解决

  • 哈 我有内存 我豪啊
    • ini_set(‘memory_limit’, ‘1000M’); 但是我的在内存泄露了,进程结束内存不释放, 一段调试猛如虎(各种变量 null)binggo, 还是不行
    • 哪位大佬解决了, 可以告知一下
  • csv文件
    • 这个不耗内存 ,还快(辛亏不是给领导看的)
    • 怎么可能没有后续呢? 需要给运营的同学教下csv的正确打开方式
  • 升级php,换包
    • php7.2了解下
    • PHPOffice/PhpSpreadsheet 这个好很多

你可能感兴趣的:(php)