如题,在webman里,用 phpSpreadSheet 导出又臭又长的数据(业务需要....),其中,还需要遍历数据进行处理(除了基本的数据外,还有几个辅助的大数组)一个请求就基本涨7,80M的内存,一个进程没处理几次请求就换新的进程了。(代码里面没有全局变量,没有用到静态数组之类的,处理的类都是通过new出来的,试过,unset掉内存也没太大变化)。请问下,这种情况应该怎么排查,或者怎么释放内存。虽然workerman能够自动产生新的进程,但是这样进程生成地也太频繁了。。。
代码在内网,没法贴代码了。
https://www.workerman.net/doc/webman/others/memory-leak.html
按照手册说法,php申请完的内存不一定立刻归还给操作系统,会留着复用提高性能,试下请求完毕后调用 gc_mem_caches() 释放内存呢
gc_mem_caches()这个也试过了,能够释放一些,但是大部分没办法释放
再加一个 gc_collect_cycles() 试下
不过你一个请求就7,80M内存占用,还是把php.ini里的memory_limit提高才好
对呀,现在就是加大了memory_limit,还能勉强撑一会,加了gc_collect_cycles这个也没啥效果。不行后面就用fpm了。感谢。
yield
这个不晓得合不合适,试试看!~mark一下
难道没有其他解决方案了吗?
php-ext-xlswriter
mark
https://jqhph.github.io/easy-excel/docs/master/installation.html
这个也不错的