memory_limit

memory_limit

   运维菜鸟     2021年1月9日 10:05     1281    

问题描述

2021/01/09 09:37:45 [error] 27199#0: *2380 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /usr/local/nginx/cms/php-crm/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 345PHP message: PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 32768 bytes) in /usr/local/ nginx/cms/php-crm/vendor/symfony/error-handler/Error/FatalError.php on line 1" while reading response header from upstream, client: 192.168.0.201, server: localhost, request: "GET /api/fmc/export/rejection?end_date=2021-01-9&ext=xls_no= HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "192.168.0.216:88"

 

在测试的时候,由于数据量造的比较大,导致在数据库中查询出来的数据也比较大,在交由php数据处理的时候,超出了php的内存范围,导致了上边的报错。

 

解决办法

修改配置文件php.ini

 

修改php配置
vi /usr/local/php/etc/php.ini
memory_limit = 128M 改成memory_limit = 512M

php-fpm重启
service php-fpm restart

这样就不会出现上边的错误。

 

官网上的介绍

memory_limit int

设置了一个脚本允许分配的最大内存量。这有助于防止写得不好的脚本吃掉服务器上所有可用的内存。请注意,如果不需要内存限制,请将此指令设置为 -1

 

下边是转载的文章的部分

文章地址:https://www.cnblogs.com/zdz8207/p/php-memory_limit.html

 

PHP5中,对于memory_limit的设定已经从以往的8M扩大到128M的上限。

对于配置中的定义解释是: memory_limit = 128M ; Maximum amount of memory a script may consume (128MB) 最大单线程的独立内存使用量。

也就是一个web请求,给予线程最大的内存使用量的定义。

memory_limit的内存分配,标配是128M。一旦独立的线程超过了128M,那PHP会报错: Fatal error: Allowed memory size of 33554432 bytes对于8G内存的服务器,如果同时并发的响应达到50,每个都是128M的峰值,那估计也是服务器会卡死的时候。 
尽量降低128M的内存配置,如果调整至64M,服务器的负载基本能下降一半左右,如果能调整至32M效果更好。但是对于应用的要求就更高,很多表建立初期就没有考虑到这个问题,如果你要采用memcache作为数据的存储,必须提前完成优化数据表的设计部署,降低独立线程PHP的内存使用量,服务器的响应和负载降低的就不仅仅是几个百分点的效果了。

 


文章评论

0

其他文章