本文主要是介绍一次排查PHP内存溢出的心路:PHP Fatal Error Allowed memory size,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一个项目的服务器报错
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 4096 bytes)
从报错容易看出,PHP进程的内存不够用了,超过了 2097152 字节的限制。
将 byte 换算成 M,也就是2M。
大家应该知道,PHP通过ini文件控制单个进程分配的内存大小。查看php.ini路径
# php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php/7.3/cli
Loaded Configuration File => /etc/php/7.3/cli/php.ini
打开 php.ini文件,搜索memory_limit,看到
memory_limit=4096MB
4096MB,够大了,为什么还会报内存溢出,而且和2M的限制不符?
到另一台服务器上运行同样的代码,并没有报错。查看该服务器的php.ini,看到
memory_limit = 1024M
呵,有一双善于找茬的眼睛才能发现了不对劲的地方,MB?M?,原来是内存单位写错了!
将 MB 改为 M,再运行,果然不再报错了。
人在家中坐,锅从天上来,这个锅非运维同学莫属了~!
再查看php.ini 模板文件
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 1024M
运维同学可能被这个128MB给误导了,PHP开发团队也有干系!?
再问PHP开发团队,php.ini中不合理的配置为何不报错,或者给出警告?
一个简单的问题引出了这些思考,也许应该给PHP开发团队提点建议。
这篇关于一次排查PHP内存溢出的心路:PHP Fatal Error Allowed memory size的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!