webman + phpSpreadSheet 大数据导出内存异常问题

iqige

如题,在webman里,用 phpSpreadSheet 导出又臭又长的数据(业务需要....),其中,还需要遍历数据进行处理(除了基本的数据外,还有几个辅助的大数组)一个请求就基本涨7,80M的内存,一个进程没处理几次请求就换新的进程了。(代码里面没有全局变量,没有用到静态数组之类的,处理的类都是通过new出来的,试过,unset掉内存也没太大变化)。请问下,这种情况应该怎么排查,或者怎么释放内存。虽然workerman能够自动产生新的进程,但是这样进程生成地也太频繁了。。。
代码在内网,没法贴代码了。

1587 5 1
5个回答

six

https://www.workerman.net/doc/webman/others/memory-leak.html
按照手册说法,php申请完的内存不一定立刻归还给操作系统,会留着复用提高性能,试下请求完毕后调用 gc_mem_caches() 释放内存呢

  • iqige 2022-05-25

    gc_mem_caches()这个也试过了,能够释放一些,但是大部分没办法释放

  • six 2022-05-25

    再加一个 gc_collect_cycles() 试下

  • six 2022-05-25

    不过你一个请求就7,80M内存占用,还是把php.ini里的memory_limit提高才好

  • iqige 2022-05-25

    对呀,现在就是加大了memory_limit,还能勉强撑一会,加了gc_collect_cycles这个也没啥效果。不行后面就用fpm了。感谢。

liziyu

yield 这个不晓得合不合适,试试看!~

  • 暂无评论
evilk

mark一下
难道没有其他解决方案了吗?

  • 暂无评论
年代过于久远,无法发表回答
🔝