2017-02-24 10 views
-2

私はブラウザでPHPスクリプトを実行しています。 phpスクリプトは、600MBを超えるバイトを消費した後にハングします。 httpdは100%cpuを使用します。ログファイルにはエラーは表示されません。私はPHP 5.4でxamppを使用しています。問題を単純化するために、私は次のスクリプトをテストした:大量のメモリを消費した後にPHPスクリプトがハングアップする

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

スクリプトがエラーで失敗します。 致命的なエラー:メモリ不足(320077824を割り当てられた)私のシステムは、1.5G程度あり (319815657バイトを割り当てしようとしました)利用可能なメモリ。これはどうしてできますか?

+0

あなたは、このコードをしようとしている地球上のどのような? – Umair

+0

630MBの文字列をメモリに作成するだけでなく(連結によって構築されるため、少なくとも2倍のメモリが必要です)、何がポイントですか?新しいメモリブロックの割り当てに大きなオーバーヘッドがあるため、メモリ使用量を低く抑えようとする方がはるかに良い –

+0

phpが利用可能な物理メモリからメモリを割り当てることができない理由を確認するには – peter

答えて

0

My system has about 1.5G memory available.

もちろん、そのすべてがPHPで利用できるわけではありません。

あなたは、PHPの設定でmemory_limitを増やす必要があります。

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

関連する問題