首页 » PHP教程 » phpscripts消耗内存技巧_PHP内存耗尽缺点分析

phpscripts消耗内存技巧_PHP内存耗尽缺点分析

duote123 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

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

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

phpscripts消耗内存技巧_PHP内存耗尽缺点分析

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

phpscripts消耗内存技巧_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函数来统计网站的内存花费,取一个得当的值即可。

标签:

相关文章

phpcms仿站技巧_织梦cms仿站教程织梦cms仿站

1.功能丰富:好的仿站工具该当供应丰富的功能,包括模板更换、内容更换、链接更换等。通过比拟不同工具的功能列表,我们可以创造哪些工具...

PHP教程 2024-12-12 阅读0 评论0

控制php交互技巧_vue2 PHP 交互

vue只关注视图层1.以PHP为例,首先须要引入,我们利用CDN,地址是&lt;script src=\公众https:/...

PHP教程 2024-12-12 阅读0 评论0