今天老王在用 PHP 操作数据库时遇到了一个错误:Allowed memory size of 134217728 bytes exhausted (tried to allocate 78 bytes),导致这个错误的原因是内存溢出,即超过了 PHP 允许的最大内存,本文分享下解决方法。
一、解决方法
对于 PHP 内存溢出的问题,这里提供 2 个常用的解决方法,一个是修改 php.ini,一个是用 ini_set 修改配置。
1、修改 php.ini
编辑 php.ini 文件,默认的限制应该是 128M,即 memory_limit = 128M
,我们可以修改成 512M:memory_limit = 512M
。
修改完毕后重启 PHP 即可生效。
2、利用 ini_set 修改配置
同样是修改成限制 512M,可以利用这段代码:
ini_set ('memory_limit', '512M')
二、扩展阅读
memory_limit = 128M
解读:Maximum amount of memory a script may consume (128MB),即最大单线程的独立内存使用量。
memory_limit 的内存分配,标配是 128M。一旦独立的线程超过了 128M,那PHP会报错: Fatal error: Allowed memory size of 33554432 bytes。对于 8G 内存的服务器,如果同时并发的响应达到 50,每个都是 128M 的峰值,那估计也是服务器会卡死的时候。
尽量降低 128M 的内存配置,如果调整至 64M,服务器的负载基本能下降一半左右,如果能调整至 32M 效果更好。但是对于应用的要求就更高,很多表建立初期就没有考虑到这个问题,如果你要采用 memcache 作为数据的存储,必须提前完成优化数据表的设计部署,降低独立线程 PHP 的内存使用量,服务器的响应和负载降低的就不仅仅是几个百分点的效果了。