Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes)

Posted lanbei-2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes)相关的知识,希望对你有一定的参考价值。

解释是可用内存已耗尽,这关系到php的memory_limit的设置问题。

这里有两种方法解决

1、修改php.ini

  memory_limit = 128

这种方法需要重启服务器,很显然,此方法对虚拟机有限制。

2、通过ini_set函数修改配置选项值(本人推荐,亲测有用)

  ini_set (‘memory_limit‘, ‘128M‘)  

PHP5中,对于memory_limit的设定已经从以往的8M扩大到128M的上限。对于配置中的定义解释是:    memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)    最大单线程的独立内存使用量。也就是一个web请求,给予线程最大的内存使用量的定义。现有的大部分网站或者论坛应用中,应用软件的配备一般都是以如下的形式搭建:        nginx(Apache)+PHP+Memcache+mysql    对于以上的应用软件的采用,优点我就不再多说。但对于Memcache的使用就是为了减少对于数据库的访问的频率的降低,也是提高服务响应的一种办法。但是对于memcache和数据库的数据存储有区别的是,memcache的数据并不是以上数据的形式存储在内存中,而是抽象化了之后以字符的形式,hash表的形式存储在内存之中。这样的存储区别导致,每次memcache的数据抽取必须全部数据反序拟化一次,将所有的数据导入进独立的单一线程中,然后第二部才是进行过滤和抽取你所需要的数据。在应用过程中,如果是读取数据库的数据,大家应该知道,优化的办法应该是在SQL语句中比保证第一次过滤尽量是提高准确性,只取需要的字段,不要全部所有字段取出之后再在应用中过滤得到自己想要的字段,这样对于服务器的负载会有本质的区别。
 如果采用memcache,必然做不到数据库在在第一次就精确过滤这点目标。那么就需要在开始设计表的同时就需要考虑到这点,尽量保证被memcache数据表尽量保证数据的较少,可以多分表来完成。
 memory_limit的内存分配,标配是128M。一旦独立的线程超过了128M,那PHP会报错:    Fatal error: Allowed memory size of 33554432 bytes对于8G内存的服务器,如果同时并发的响应达到50,每个都是128M的峰值,那估计也是服务器会卡死的时候。
 尽量降低128M的内存配置,如果调整至64M,服务器的负载基本能下降一半左右,如果能调整至32M效果更好。但是对于应用的要求就更高,很多表建立初期就没有考虑到这个问题,如果你要采用memcache作为数据的存储,必须提前完成优化数据表的设计部署,降低独立线程PHP的内存使用量,服务器的响应和负载降低的就不仅仅是几个百分点的效果了。




以上是关于Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes)的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab提交代码:You are not allowed to push code to this project.fatal: unable to access requested URL

Gitlab提交代码:You are not allowed to push code to this project.fatal: unable to access requested URL

PHP的内存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in

执行php程序的时候,报错Allowed memory size of 134217728 bytes exhausted (tried to allocate 83 bytes)

vc2008中 fatal error LNK1169: 找到一个或多个多重定义的符号

已经在其他文件中定义, fatal error LNK1169: 找到一个或多个多重定义的符号