ThinkPhp3.2放到linux环境下出现程序内存分配问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ThinkPhp3.2放到linux环境下出现程序内存分配问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4147字,纯文字阅读大概需要6分钟。
内容图文
![ThinkPhp3.2放到linux环境下出现程序内存分配问题](/upload/InfoBanner/zyjiaocheng/203/8a805ff7d22b4d7f912d9527b935b397.jpg)
----------------------------------------------------
:(
Allowed memory size of 1916796928 bytes exhausted (tried to allocate 3086655745 bytes)
错误位置
FILE: /data/xxx/ThinkPHP/Common/functions.php LINE: 370
ThinkPHP3.2.2 { Fast & Simple OOP PHP Framework } -- [ WE CAN DO IT JUST THINK ]
--------------------------------------------------
环境是 php5.4+nginx + mysql ,机器为阿里云主机,内存为1024m
请问有碰到这样问题的人么?
是咋回事?如何解决?修改www.conf 中的memory_limit 改大后还是依然出现这个问题。
回复讨论(解决方案)
什么东西一次要2.8G?
第370行是这样一句:
return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match){return strtoupper($match[1]);}, $name));
居然要分配2.8G内存??
Allowed memory size of 1916796928 bytes exhausted (tried to allocate 3086655745 bytes)
的含义是:
在 1916796928b (1828M) 的可用内存中
申请 3086655745b (2943M)的空间失败
显然是待处理的变量 $name 出现了问题
清空 Runtime 目录再试试
清空 Runtime 目录了,还是没有解决问题!
两天了,这个破问题还没解决 。。
框架本来就耗内存。
这个啊,框架怎么耗内存也不可能耗到2G啊
估计是死循环,不断开辟空间了。
如果你确定是那句的问题,就不要写那么复杂啊啊
$b = preg_replace_callback('/_([a-zA-Z])/', 'aaa', $name)
return ucfirst($b);
function aaa($match){
return strtoupper($match[1]);
}
可能是由于替换掉_([a-zA-Z]) 然后从头开始找,所以会无限循环,你得让他结束的方法,
比如把_去掉来停止
换别的方案可能可以 preg_replace,preg_match_all,preg_split
这个啊,框架怎么耗内存也不可能耗到2G啊
估计是死循环,不断开辟空间了。
如果你确定是那句的问题,就不要写那么复杂啊啊
$b = preg_replace_callback('/_([a-zA-Z])/', 'aaa', $name)
return ucfirst($b);
function aaa($match){
return strtoupper($match[1]);
}
可能是由于替换掉_([a-zA-Z]) 然后从头开始找,所以会无限循环,你得让他结束的方法,
比如把_去掉来停止
换别的方案可能可以 preg_replace,preg_match_all,preg_split
--------------------------------------
这是框架内的代码。不是我写的。
刷新下,又出现如下问题。再刷新,还是上面内存问题,交替出现。
------------------
502 Bad Gateway
nginx/1.4.1
我怀疑是你的程序哪里错了,可能是写法错了,使底层框架产生死循环。
你这样做,查看你可控的逻辑流程。
从上面开始,一句句往下添加exit();(当然你可以用二分法找)
直到开启哪一句使得出现这个问题,就是那句错了。
查一下那句用到了什么函数,打印一下变量,看看传参顺序有没有错。
不行的话把那句及附近的代码贴上来让大家帮你看看
我看了3.0下面很像没有你说的那个函数
http://doc.thinkphp.cn/reference/functions.html
会不会是你版本低了?
哦 是3.2.2 看错了 你按9楼那样做就好。
然后和官方手册匹配下用法对不对
http://document.thinkphp.cn/manual_3_2.html
什么东西一次要2.8G?
----------------------------
版主,你不是碰到和回答过同样问题么?你是不是天天熬夜到2点,达到了过目就忘的能力啊。
问题原因就在于:preg_replace_callback出现内存泄露。在windows下没有问题,在linux下5.4.22,一下有上面问题。
所在,TP32在linux用php5.4可能会出现上面问题。
我的php环境是 5.4.22.
很奇怪!即便我判定是 bug,那也不能说明什么
什么东西一次要2.8G?
----------------------------
版主,你不是碰到和回答过同样问题么?你是不是天天熬夜到2点,达到了过目就忘的能力啊。
问题原因就在于:preg_replace_callback出现内存泄露。在windows下没有问题,在linux下5.4.22,一下有上面问题。
所在,TP32在linux用php5.4可能会出现上面问题。
我怀疑是你的程序哪里错了,可能是写法错了,使底层框架产生死循环。
你这样做,查看你可控的逻辑流程。
从上面开始,一句句往下添加exit();(当然你可以用二分法找)
直到开启哪一句使得出现这个问题,就是那句错了。
查一下那句用到了什么函数,打印一下变量,看看传参顺序有没有错。
不行的话把那句及附近的代码贴上来让大家帮你看看
多谢,和我程序完全没有关系。随便使用下 preg_replace_callback就会出现问题。比如test.php:
var_dump(preg_replace_callback('/\w{2}/',function($m)use(&$i){ echo ' i='.$i++; return $m[0]."cc ";},'abcd2acc'));
也会出现同样的问题。在国外网站随便一搜索,报告这个bug的人实在是太多了。但一直反复解决了,又反复出现。
自己写了个自认为比TP优秀多的框架YuYan PHP,从根本上解决了此问题。
内容总结
以上是互联网集市为您收集整理的ThinkPhp3.2放到linux环境下出现程序内存分配问题全部内容,希望文章能够帮你解决ThinkPhp3.2放到linux环境下出现程序内存分配问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。