跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 为什么 PHP 脚本运行的内存限制最小是 2M 呢? memory_limit 参数已经设置为 1M
未分類
15 5 月 2020

为什么 PHP 脚本运行的内存限制最小是 2M 呢? memory_limit 参数已经设置为 1M

为什么 PHP 脚本运行的内存限制最小是 2M 呢? memory_limit 参数已经设置为 1M

資深大佬 : ligthdawn 4

附上脚本

<?php  ini_set('memory_limit', '1M'); file_get_contents("/data/www/elasticsearch-7.4.2-linux-x86_64.tar.gz"); 

读取的文件 elasticsearch-7.4.2-linux-x86_64.tar.gz 200 多 M

报错信息如下 PHP Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 288783720 bytes)

疑问,为什么设置了脚本运行的内存限制为 1M,但是报错信息是显示 2M 呢

大佬有話說 (4)

  • 資深大佬 : CodeCodeStudy

    PHP 采取“预分配方案”,提前向操作系统申请一个 chunk ( 2M,利用到 hugepage 特性),并且将这 2M 内存切割为不同规格(大小)的若干内存块,当程序申请内存时,直接查找现有的空闲内存块即可

    https://segmentfault.com/a/1190000014764790

  • 資深大佬 : CodeCodeStudy

    https://github.com/php/php-src/blob/master/Zend/zend_alloc.c#L2660

    ZEND_API int zend_set_memory_limit(size_t memory_limit)
    {
    #if ZEND_MM_LIMIT
    AG(mm_heap)->limit = (memory_limit >= ZEND_MM_CHUNK_SIZE) ? memory_limit : ZEND_MM_CHUNK_SIZE;
    #endif
    return SUCCESS;
    }

    说明 memory_limit 是有最小值限制的

  • 資深大佬 : CodeCodeStudy

    https://github.com/php/php-src/blob/master/Zend/zend_alloc_sizes.h#L22

    #define ZEND_MM_CHUNK_SIZE (2 * 1024 * 1024) /* 2 MB */

  • 主 資深大佬 : ligthdawn

    @CodeCodeStudy 谢谢老哥,今天早上刚刚找到类似的文章 https://blog.csdn.net/IT_10/article/details/94768679

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具