2017-02-24 24 views
-2

我正在瀏覽器中運行php腳本。消耗超過600MB字節後,php腳本消失。 httpd使用100%cpu。日誌文件中沒有錯誤。我使用xampp和php 5.4。爲了簡化問題,我測試了以下腳本:php腳本hungs消耗大量內存後

<?php 
set_time_limit(0); 
ini_set('memory_limit', '1800M'); 
$b=""; 
for($i=0;$i<630000000;$i++) 
{ 
    $b.='a'; 
} 
echo "completed!"; 
?> 

腳本失敗,出現錯誤: 致命錯誤:內存(分配320077824)(試圖分配319815657個字節) 我的系統有1.5G左右內存可用。這怎麼會發生?

+0

究竟您嘗試使用此代碼? – Umair

+0

除了在內存中創建一個630MB的字符串(這需要至少兩倍,因爲它是通過串聯構建的)有什麼意義?更好地嘗試和保持內存使用率低,因爲在新的內存塊分配有大量開銷 –

+0

要檢查爲什麼PHP不能從可用物理內存分配內存 – peter

回答

0

My system has about 1.5G memory available.

當然,並非所有這些都可用於PHP。

你需要增加memory_limit在你的PHP配置:

memory_limit integer
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.

+0

不幸的是,在php.ini中更改memory_limit = 1500M無法解決此問題。 – peter

+0

有趣的是,即使我關閉了瀏覽器,httpd仍然使用100%的CPU。我必須停止apache以使其正常。由於沒有錯誤消息/日誌,因此如何調試此問題? – peter

+0

正常情況下,如果瀏覽器關閉連接,腳本將中止。檢查您的配置中的「ignore_user_abort」設置。 – CBroe