Home > PHP > PHP5.2.0でOut of memory

PHP5.2.0でOut of memory

  • 2006-12-07 (木) 19:00
  • PHP
この記事の所要時間: 512

PHP5.2.0にメモリリークのバグがあるようです。

どうやらPHP 5.2.0のZendEngine2にメモリリークバグがあるようでBTSにもPHP Bugs: #39438: Memory leak PHP Fatal error: Out of memoryとして報告があがっていました。

PHP 5.2.0におけるメモリリークバグ – Sooey

CVS版では既に修正されていますが、CVS版がすぐに適用できない場合もある(ない?)のでリコンパイルせずにこの問題を回避する方法を考えてみました。

メモリリークする事はもちろんまずいのですが、結局はPHPがメモリを確保する際にmemory_limitの制限に引っかかってしまう事によりFatal errorが発生しています。そこでmemory_limitの制限を外す or 上限値を上げる方法を試してみます。

バグを発生させるコードです。
(via [cvs] View of /ZendEngine2/tests/bug39438.phpt

< ?php
$i=0;
$test2=array(
   'a1_teasermenu' => array(
   		'downloadcounter' => 2777,
        'versions' => array(
        	'0.1.0' => array (
        		'title' => 'A1 Teasermenu',
        	    'description' => 'Displays a teaser for advanced subpages or a selection of advanced pages',
        	    'state' => 'stable',
        	    'reviewstate' => 0,
        	    'category' => 'plugin',
        	    'downloadcounter' => 2787,
        	    'lastuploaddate' => 1088427240,
        	    'dependencies' => array (
        	          'depends' => array(
        	                  'typo3' =>'', 
        	                  'php' =>'', 
        	                  'cms' => ''
        	           ),        	
        	          'conflicts' => array('' =>'')        	
        	    ),        	
        	  	'authorname' => 'Mirko Balluff',
        	  	'authoremail' => 'balluff@amt1.de',
        	  	'ownerusername' => 'amt1',
        	  	't3xfilemd5' => '3a4ec198b6ea8d0bc2d69d9b7400398f',
      		)
  		)
  	)
);
$test=array();
while($i&lt;1200) {	
	$test[]=$test2;
	$i++;
}
$out=serialize($test);
echo "ok\n";
?>

まずはPHP5.1.6(memory_limit=16M)で実行してみてみました。こちらはエラーになりません。

$ php516/bin/php -v
PHP 5.1.6 (cli) (built: Oct 17 2006 20:22:42) 
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
$ php516/bin/php -f memory_leak_520.php -d memory_limit=16M
ok

続いてPHP5.2.0(memory_limit=16M)で実行するとFatal errorが発生しました。

$ php -v
PHP 5.2.0 (cli) (built: Nov  7 2006 14:33:45) 
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
$ php -f memory_leak_520.php -d memory_limit=16M
PHP Fatal error:  Allowed memory size of 16777216 bytes exhausted (tried to allocate 784851 bytes) in ~/memory_leak_520.php on line 36

memory_limit=24Mにするとエラーは発生しませんでした。

$ php -f memory_leak_520.php -d memory_limit=24M
ok

memory_limitを無制限にした場合もエラーは発生しませんでした。

$ php -f memory_leak_520.php -d memory_limit=-1
ok

本来はバグを修正すべきですが、まあこんな方法もあるという事で。

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
/blog/2006/12/php520_memory_leak.html/trackback
Listed below are links to weblogs that reference
PHP5.2.0でOut of memory from Shin x blog

Home > PHP > PHP5.2.0でOut of memory

検索
フィード
メタ情報

Return to page top