PHP的memory_limit引起的问题

摘要:
在运行PHP程序,通常会遇到下面的错误,这个意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存。查看php设置的memory_limit值[root@192-168-x-xetc]#php-i|grepmemory_limitmemory_limit=˃128M=˃128M找到php对应的配置文件[root@192-168-x-xetc]#php-i|grep"LoadedConfigurationFile"LoadedConfigurationFile=˃/usr/local/webserver/php-5.x.x/etc/php.ini在文件尾部最加一行[root@192-168-x-xetc]#echo"memory_limit=1024M"˃˃/usr/local/webserver/php-5.x.x/etc/php.ini&&php-i|grepmemory_limitmemory_limit=˃1024M=˃1024M重新加载一下web服务[root@192-168-x-xetc]#servicenginxreload重新载入nginx:[确定]因为PHP没有守护进程一说,修改过以后,就会立即使用新的配置文件,不需要重启php-fpm进程。参数语法memory_limitinteger本指令设定了一个脚本所能够申请到的最大内存字节数。

在运行PHP程序,通常会遇到下面的错误, 这个意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存。解决这个问题,首先需要查看你的程序是否分配了过多的内存,在程序没有问题的情况下,你可以通过一下方法来增加PHP的内存限制(memory_limit)

"Fatal Error: Allowed memory size of xxxxxx bytes exhausted"

出现该错误的原因:在确保不是程序产生的原因(例如死循环),有时候可能是php页面消耗的最大内存默认是为 128M .如果文件太大 ,图片太大或者读取接口数据进行及时的时候 会发生上述错误

生产环境下故障处理一例
案例:
生产环境下,storage服务器上只安装nginx,现在是行执行PHP跑PHP脚本,在脚本的执行过程中发现(脚本内容含每次取5000个文件然后执行其它操作)速度奇慢,在本地测试时分分钟内搞定的事,在线上要执行2个多小时,经过排查排除掉服务器负载问题、数据库问题、服务器网络问题后,认为可能是php.ini配置文件中的资源限制所引起,于是修改了一下memory_limit将默认值128M修改为1024M后再次执行原脚本,速度得到大幅度提升,现把此参数的含义说明一下。

查看php设置的memory_limit值

[root@192-168-x-x etc]# php -i|grepmemory_limit
memory_limit => 128M => 128M

找到php对应的配置文件

[root@192-168-x-x etc]# php -i | grep "Loaded Configuration File"Loaded Configuration File => /usr/local/webserver/php-5.x.x/etc/php.ini

在文件尾部最加一行

[root@192-168-x-x etc]# echo "memory_limit = 1024M" >> /usr/local/webserver/php-5.x.x/etc/php.ini && php -i|grepmemory_limit
memory_limit => 1024M => 1024M

重新加载一下web服务

[root@192-168-x-xetc]# service nginx reload
重新载入 nginx:                                           [确定]

因为PHP没有守护进程一说,修改过以后,就会立即使用新的配置文件,不需要重启php-fpm进程。

此值设置多大为好?
建议根据应用需求来设置。物理服务器,如果内存够大的话建议限制内存较大一些如512M,1024M都可,如果是VPS之类的可能限制在128(默认)64M或者以下是比较合适的,特别是有web服务器的时候,一旦开启多个php的fast-cgi,估计服务器都卡的不动了。
参数语法
memory_limit integer
本指令设定了一个脚本所能够申请到的最大内存字节数。
指令作用
这有助于防止写得不好的脚本消耗光服务器上的可用内存。
一般设置不建议超过物理内存的1/4

免责声明:文章转载自《PHP的memory_limit引起的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HBase之七:事务和并发控制机制原理java读取html文件,截取<body>标签中内容下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP获取上周、本周、上月、本月、本季度、上季度时间

echo date("Y-m-d",strtotime("now")); echo "<br>"; echo date("Y-m-d",strtotime("-1 week Monday")); echo "<br>"; echo date("Y-m-d",strtotime("-1 week Sunday")); ech...

php实现MySQL两库对比升级版

define('DATABASE1', 'db1'); $dbi1 = new DbMysql; $dbi1->dbh = 'mysql://root:password@127.0.0.1/'.DATABASE1; define('DATABASE2', 'db2'); $dbi2 = new DbMysql; $dbi2->dbh = 'm...

PHP高精度数学运算函数

php 浮点数计算比较及取整不准确。举例:$a = 0.2+0.7;$b = 0.9;var_dump($a == $b); //输出的结果为bool(false)PHP 官方手册说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二 进制的格式。printf("%0.20f", $a); //输出的结果为0.899999999...

基于 Yii 2.0 高级模版的控制台命令实现定时任务的流程

、复制vendoryiisoftyii2consolecontrollersCacheController.php至consolecontrollersLuaGameTeamSkillController.php,如图1 图1 2、将consolecontrollersLuaGameTeamSkillController.php重命名为consolec...

接口中转stream传输 request/response

php实现 CURLOPT_WRITEFUNCTION: for response ,把接口返回的结果拿回来,会进行多次回调,直到接口中的内容全部读完CURLOPT_READFUNCTION :for request ,把要请求接口的参数数据写出去 CURLOPT_READFUNCTION 回调函数名。该函数应接受三个参数。第一个是 cU...

php中访问文件或文件夹相关操作

1、filetype() //可以输出相关文件类型,如:dir(表示目录)/file(表示文件) 如:echo filetype("c:/") 输出结果为:dir 如:echo filetype("f:/num.txt") 输出结果为:file 2、stat() //获得指定文件名参数目标文件基本属性 $stt=stat("f:/num.txt"); pr...