话说库里有60多W条记录,用php+mysql循环读库,生成xml文件。
现在准备每个xml页面存1000条记录,那就是生成60多页xml文件。现在问题来了:每次生成xml文件到13页的时候 也就是读库里134000条的时候,页面就报错了:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 80 bytes)求大牛 帮忙看下 这是怎么回事? 该怎么处理? 如何让他顺利生成完所有页面
祝好心人一生平安!
现在准备每个xml页面存1000条记录,那就是生成60多页xml文件。现在问题来了:每次生成xml文件到13页的时候 也就是读库里134000条的时候,页面就报错了:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 80 bytes)求大牛 帮忙看下 这是怎么回事? 该怎么处理? 如何让他顺利生成完所有页面
祝好心人一生平安!
最好还是增加循环读取次数,而且每次循环结束时unset() mysql_free_result()释放不需要的内存
恩,有道理,可能是返回的数据集占用了太多的内存,可以结合LIMIT循控制,循环查询,每次只返回1000条记录。
方法是:
1.增大程序可以使用的内存 ini_set('memory_limit', '???M');
2.减少程序已经使用的内存, 看你的code
用mysql_free_result()释放结果集而不是mysql连接,10页释放一次,还不信了这点数据还搞定不了
你是每 1000 条数据写一个文件吧?
既然是这样,为什么内存占用会累积到第13页?
前面12页不是已经生成了吗?为什么没有去释放他们所占用的内存?很显然,你的程序并不像你 #9 描述的那样
另外,你是如何产生 xml 的?不会是 DOMDocument 吧?
504 Gateway Time-out--------------------------------------------------------------------------------nginx/0.6.35
另外要补充的就是:我就是用 DOMDocument 生成的xml,这个有什么异议吗?我只想请教大家 我如何才能顺利生成完所有xml文件 谢谢
这个是nginx的连接超时到了...你是用浏览器访问的方式执行的? 不是命令行执行?
好吧..那要么调整nginx里的timeout设置,要么就让你的页面能够设定从第几页开始输出。
不是 php 超时,而是 nginx超时。因为你在处理期间一直没有echoDOMDocument 非常消耗内存
对于你的应用不见得合适
你可贴出 xml 结构看看,可能在 SQL 中可组装完成
因为我不断在echo 生成多少个文件 就echo了多少句求如何让浏览器顺利执行完 我尽量改程序完成 因为服务器我没权限另外想请教的是:不用浏览器 如何用命令行执行 小弟新手 见笑了 没用过命令行执行php页面 感谢所有好心人
没有必要和你争辩既然是 服务器我没权限 ,那么也就无所谓命令行执行了