首页 » SEO优化 » php耗尽内存技巧_PHP内存耗尽缺点分析

php耗尽内存技巧_PHP内存耗尽缺点分析

访客 2024-12-11 0

扫一扫用手机浏览

文章目录 [+]

但是这里有一个很大的问题,php许可访问的内存大小是35389440字节,而实际要分配的只有1406507字节。
为什么要分配的内存比实际许可访问的内存小还会引发致命缺点呢?

查了很多这方面的资料,创造很多这样搜索结果,都是实际要分配的内存要小于许可的内存,但是没有找到对此的解释。

php耗尽内存技巧_PHP内存耗尽缺点分析

首先想到是不是PHP本身这个内存限定功能有bug,于是做了如下实验:

php耗尽内存技巧_PHP内存耗尽缺点分析
(图片来自网络侵删)

1, 天生一个10MB大小的文件 dd if=/dev/zero of=10mb bs=1M count=10

2, 天生如下php文件并访问:

<?phpini_set(\公众memory_limit\公众,\公众2M\公众);echo file_get_contents(\"大众./10mb\"大众);?>

创造其报错“Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 10493952 bytes)”,这个报错和我们设置的2M的内存限定,实际要分配10M的情形是一样的。
这解释内存限定本身功能是没有问题的,报错的数据和实际的数据是能对上号的。

那么,上面的问题出在哪里呢?为什么实际要分配的内存比限定的内存要小,还会导致出错?又查了一下php关于memory_limit的解释1:

This sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server. Note that to have no memory limit, set this directive to -1.

这里也没有对上述问题进行解释,只是见告我们memory_limit用来限定一个脚本等分配的内存大小用来保护做事器免受poorly written scripts的影响。
也便是说memory_limit是限定单个PHP运行脚本的可访问内存大小的,那会不会存在一种可能,全体线程中的多个操作加起来的内存超过了总限定大小,但单个操作的内存又只占全体限定的很小一部分,而末了那根压去世骆驼的稻草是PHP报错出来的,以是显示出试图访问内存小于限定的内存大小?为了验证这个猜想,我把上述PHP文件改成这样并访问:

<?phpini_set(\"大众memory_limit\公众,\"大众15M\"大众);$a = file_get_contents(\"大众./10mb\"大众);$b = file_get_contents(\"大众./10mb\"大众);?>

创造其报错“Fatal error: Allowed memory size of 15728640 bytes exhausted (tried to allocate 10493952 bytes)”,实际要分配10M内存,小于许可访问的15M,验证了前面的猜想。
也便是说,程序在运行时如果超过设置的内存,PHP报错信息只会提示当前操作试图访问的内存大小。

那么直接增加内存限定的大小就可以办理这个问题了,限定的大小可以通过在php的shutdown函数上注册memory_get_usage函数来统计网站的内存花费,取一个得当的值即可。

标签:

相关文章

ajax挪用php页面技巧_PHPAJAX 与 PHP

AJAX PHP 实例下面的实例将演示当用户在输入框中键入字符时,网页如何与 Web 做事器进行通信:实例考试测验在输入框中输入一...

SEO优化 2024-12-13 阅读0 评论0

php页面寄义技巧_小白教你PHP

建议先阅读前篇文章:PHP站点要这样配置做事器才安全当然不愿麻烦的,我们在这里也回顾一下。昨日回顾主机(站点)配置一个站点的2个核...

SEO优化 2024-12-13 阅读0 评论0