首頁>Program>source

執行PHP指令碼時出現錯誤...。

Fatal error: Out of memory (allocated 1827405824) (tried to allocate 88800 bytes)

我已將此行添加到我的PHP指令碼中。

ini_set("memory_limit","3000M");

此語句似乎確實可以正確控製記憶體使用量,但我似乎無法使其超過1.8GB。 好像在其他地方限製了記憶體上限。 我還添加了php.ini ...

memory_limit = 3000M

有人知道記憶體是否受限於其他地方吗?

我正在使用Xampp執行本地服務器。 我有windows 7、64位和4GB RAM。 我的指令碼使用PHP的GD圖像庫,尝試通過ImageCreateTrueColor()分配圖像引用時出現錯誤。

(我知道這是一个巨大的記憶體-但這只是一个指令碼,以這種方式執行起来要容易得多。)

谢谢。

更新。...

@难以捉摸@Orbling 我希望每个人都對這个問题感到厌倦,但這是說明問题的簡化代碼。

<?php
    ini_set("memory_limit","4000000000");
    echo "ini_get = " . ini_get('memory_limit') . "<br>\n";
    echo "memory_get_usage = " . memory_get_usage(true) . "<br>\n";
    $bigImageHandle = imagecreatetruecolor(22200, 24800);  //this is line 5
?>

瀏覽器輸出...

ini_get = 4000000000
memory_get_usage = 524288
Fatal error: Out of memory (allocated 1843396608) (tried to allocate 88800 bytes) in
E:\User\My_Webs\experiments\houseshunting\temp\osMaps\t1.php on line 5

我用一組较小的圖塊和imagecreatetruecolor()所使用的記憶體进行了測試,估計需要2.7GB

最新回復
  • 12天前
    1 #

    您正在64位操作系統上執行,但是Apache 和PHP可能仍然是32位.如果您使用的是mod_php,則apache是​​這裏的限製因素.

    除非使用/ 3GB開關並且軟體知道3GB支援,否則32位程序的RAM大約限製為2GiB。

    這仍然有大約200 MiB的空間,似乎還没有使用,但是它足够小,可以被必须全部載入到記憶體中的各種庫使用

    据我所知,庫的使用不会顯示在已提交的記憶體中,但仍会計入2GiB限製(就像設備記憶體在32位視窗上計入4GiB限製一樣。在其中安裝2个GiB圖形 卡將您的可用RAM降低到2GiB以下。

    最有可能的解決方案? 安裝64位PHP,然後將其分發(可能使用system()呼叫)

  • 12天前
    2 #

    使用Acquia Dev Desktop,我遇到了很多記憶體限製崩潰。

    增加了對PHP.ini的記憶體限製之後。

    php_value memory_limit                  1024M
    php_value max_execution_time            3000
    

    此問题较不常见,但仍会發生(尤其是在Feature Recreate中)

    在我的httpd.conf檔案中,我將StackThread增加到16M

    ThreadStackSize 16*1024*1024
    

    它解決了記憶體崩潰的問题。 希望它能對您有所帮助

  • 12天前
    3 #

    您正在使用哪个PHP版本?

    或已將memory_limit變數包含在32位整數中,因此不能超過2GB。

    請參阅:http://bugs.php.net/bug.php?id=39132&edit=1

    在该錯誤報告的底部註釋中,可能是將註解形式轉換為數字的例程,請尝試將其輸入數字。

  • 12天前
    4 #

    檢查您的Apache配置(例如,httpd). conf).可能有一个RLimitMEM指令限製了記憶體,以允许子程序處理請求。

    因此,您可以隨意設置PHP限製,如果Apache产生具有記憶體限製的程序,則不能超過该限製。

    如果您使用的是託管服務並拥有共享的服務器,則可能您無權訪問此配置,因此需要与提供商合作.如您所见,它的配置適用於整个服務器範圍...您不太可能让他们更改此設置.再說一次,如果您希望生成大於1.5Gig的程序,那麼您應该以不同的方式解決問题(其他人建議這樣做)或获取某種专用的服務器(例如EC2)。

    例如:

    /usr/local/apache/conf
    #RLimitMEM 85643200 104857600   # Limit to: 80Mb / process, 100Mb total
    RLimitMEM 134217728 537395200   # Limit to: 128Mb / Process, 512Mb total
    

  • 12天前
    5 #

    该問题可能是由執行32位apache和php引起的.尝試將它们升級到64位二进製文​​件,看看是否可以解決問题。

  • assembly:x86過程錯誤
  • 如何让打字稿檢查有效的物件屬性名稱