-1

情景是这样,用的PHP 5.5 + apche2.4 ,使用json_decode()函数依次拆分四个160MB左右的json数据文件,不管我是用逐行读取文件还是用json_decode(),基本在运行一会之后就报内存溢出的错误。
Fatal error: Out of memory (allocated 962592768) (tried to allocate 24 bytes) in D:phpstudyPHPTutorialWWWlyqxApplicationAdminModelTemModel.class.php on line 66
我首先就去php.ini里修改了memory_limit = 4000M ,够大了吧,服务器是8G的物理内存,已用为2.8G,运行我程序的时候最多最多已用空间都没超过4GB,而且我特意从phpinfo里看到了memory_limit = 4000M,这能证明修改生效对吧。然而依然会经常报内存溢出,我已经快疯了,求指点!!
另外有一个情况,就是如果我连续运行这四个拆分程序,那么到第三个的时候才会提示内存不足,如果我重启apache单独运行他们,那么每一个都不会导致内存溢出。我在程序循环中和循环外几乎把所有定义过的变量都unset()了,尽管如此确实还是能看到内存占用在不断上涨,可尽管如此距离我定义的可调用内存极限值还差很多呢啊?

2019-08-14 提问
5 个回答
0

已采纳

我的问题解决了!我用的phpstudy集成环境,php5.58+apache的服务器,导致我apache内存越来越多的原因是这个整合包里的版本有BUG!换成php5.4后apahce 的内存整理机制就正常了!!

1

不要用apache或nginx这种http服务器,直接用cli去跑

0

json_decode 这个函数有时会有这样的问题。
将你要解析的字符串手动用(str)转一下

0
  • 1、 先排除下,是否为apache带来的限制,可以试下,把apache停了,试下用root用户 cd 项目目录; php -S 0.0.0.0:80 #用php本身启动一个server,之后执行下,看看是否内存溢出
  • 2、 上面那一步如果没有问题,可能是apache或者运行用户本身的限制导致php脚本无法正常分配内存,可以检查下 apache的配置中是否存在RLimitMEM 之类的内存限制设定。可以cd /etc/apache2 ;grep -rn RLimitMEM * ; 另外就是,检查下/etc/security/limits.conf ,是否对普通用户存在限制?
PS:如果1测试通过,2也没检查出明显异常,建议增加 RLimitMEM 数值,并修改/etc/security/limits.conf 放开对www(apache执行用户)的限制,之后再试试。 期待反馈:)

撰写答案

推广链接