设为首页 收藏本站
查看: 1305|回复: 0

[经验分享] php内存限制

[复制链接]

尚未签到

发表于 2018-12-20 08:13:39 | 显示全部楼层 |阅读模式
  最近的页面好像越写越大,一个index.页面居然都会产生这种错误:

  [Mon Nov 10 10:49:09 2008] [error] [client 127.0.0.1] PHP Fatal  error:  Allowed memory>
  [Mon Nov 10 10:57:53 2008] [error] [client 127.0.0.1] PHP Fatal error:   Allowed memory>
  [Mon Nov 10 11:05:10 2008] [error] [client 127.0.0.1] PHP Fatal error:   Allowed memory>
  [Mon Nov 10 11:05:56 2008] [error] [client 127.0.0.1] PHP Fatal error:   Allowed memory>  一个页面脚本都能超出 16M 的范围?
  php中的相关文档解释 memory_limit 如下:
  memory_limit integer
  该指令设定了一个脚本 所能够申请到的最大内存字节数。这有助于防止写得不好的脚本消耗光服务器上的可用内存。要使用此指令必须在编译的时候激活。因此  configure 一行中应该包括:--enable-memory-limit。如果不需要任何内存上的限制,必须将其设为 -1。 从 php  4.3.2 起,当激活了 memory_limit,PHP 函数 memory_get_usage() 便可以使用了。
  也就是说,php在一个 page 中的处理内存限制,默认的(/etc/php.ini)定义为 16M (我的系统默认安装后),后来开发组的应用写的越来越复杂,但是在结构上可能还有些欠缺,频繁的对象请求,居然造成了内存不足。倒是可以使用下面的内容来解决:
  1. 在php中调用 init_set('memory_limix', 'xxxM'),这样可以指定某个站点中 单页面可以使用的内存数
  2. 修改 /etc/php.ini 中 memory_limit 16M 的设定 (需要 service httpd restart 才生效)
  至于调整到多少,可以根据测试,一点一点加上来
  上面我们说过,最好的方式应该在应用层面解决,而不是不停的增加内存设置。我对代码进行了一个测试,在页面结尾输出下面内容:
  
  结果显示可以用骇人听闻来形容:
  total runtime: 1.47 s
  memory usage: 77.09 M
  一个页面居然会有77M的请求。究其原因,是程序员在编码时,仅仅对变量赋值,却从来没有 unset ($var)  过。试想,如果一个页面请求要处理20个sql查询,每个sql查询返回10个sql结果,而程序员从来都不关心是返回一个row的所有column还是 仅仅返回需要的column(实际上当我们采用更common的中间层时,往往会返回全部的column而不是特定的某几个字段,就像在 ORM  中如NHibernate, JBOSS中的那样)如果一条row有10K, 那么这个页面到处理结束时就要增加到  10K*10*20=2M的数组分配,这还不算有时候我们需要最数组进行复制。
  因此在php中,比较合理的方式,还是用后就 unset($var) 吧。毕竟资源还是有限制的。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653369-1-1.html 上篇帖子: 关于php配置参数 下篇帖子: php 操作word 的使用com组件的总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表