导出大量Exl数据报错 nginx 502 Bad Gateway

TM

导出大量Exl数据报错 nginx 502 Bad Gateway

使用使用nginx代理webman 目前导出6W数据没问题超出8W数据后则报错502

已经给方法增加运行时间和脚本运行内存,nginx错误日志未记录信息

   //导出
    public function exlCsv($queryResult, $heade)
    {
        ini_set('memory_limit', '800M');
        ini_set('max_execution_time', '500');
        //获取头部
        $headeList = $this->forHeader($heade);
        //获取内容
        $body = $this->forBody($queryResult);
        $headeList .= "\n" . $body;
        //下载csv的文件名
        $fileName = '公共导出' . date('Y-m-d H:i:s') . '.csv';
        //打开php数据输入缓冲区
        ob_start();
        echo $headeList;
        $xlsData = ob_get_clean();
        $response = response();
        $response->header('Content-type', 'text/html;charset=utf-8');
        $response->header('Content-type', 'text/csv');
        $response->header('Content-Disposition', 'attachment;filename=' . $fileName);
        $response->header('Cache-Control', 'must-revalidate,post-check=0,pre-check=0');
        $response->header('Expires', '0');
        $response->header('Pragma', 'public');
        $response->header('Connection', 'Keep-Alive');
        $response->withBody($xlsData);
        return $response;
    }

报错信息

502 Bad Gateway
nginx

截图报错信息里报错文件相关代码

截图

操作系统及workerman/webman等框架组件具体版本

webman版本
截图

php版本号 运行环境linux
截图
代理配置
截图

1047 4 1
4个回答

keytehu

看rutime/logs下的日志,猜测导出数据太大,超出php的内存限制了

  • TM 2023-01-19

    rutime 下面没打印出报错日志呢,应该不是内存问题 我加到2048M都不行,导出执行到1分30秒就断开了不知道是php的脚本时间问题还是nginx时间问题,不过这两个时间我都设置了300秒 但是脚本只跑了90秒就断开了

又有心跳

不用nginx代理呢

  • TM 2023-01-19

    不用nginx代理可以,已处理,nginx代理修改配置没生效,我之前是重载配置的,我重启服务后可以了

liziyu

我记得php有个yield你度一下用法,可以解决吃内存问题。

  • TM 2023-01-20

    迭代器吗?

年代过于久远,无法发表回答
🔝