zend_mm_heap corrupted とは

PHP5.2以降で、ページ表示のときにブラウザ画面が真っ白になったり、PHPファイルのダウンロード表示が出る場合です。

このときサーバからのレスポンスが

HTTP/0.9 200 OK

のみで、これ以外なにもレスポンスがない状態です。

表示内容がないため、画面が真っ白になる。
レスポンスコードのみのため、Content-Typeを判断できず、拡張子.phpからPHPファイルのダウンロードとなります。

Apacheのエラーログ(error.log)では、メモリマネージャのヒープメモリの破損したことが残ります。

zend_mm_heap corrupted

これはPHP5.2以降で採用されたメモリー・マネージャーによるものです。
環境変数のZEND_MM_MEM_TYPEやZEND_MM_SEG_SIZEを調整するとか、php.iniの memory_limit の値を大きくすることで解消されることがあります。
またPHP5.2以降で発生するため、PHPのバージョンを5.1に下げることで発生しなくなります。

ただ割り当てるメモリに空きがないときには、サーバ(ハードウェア)のメモリの増設が必要になります。
Linuxで、メモリの使用状況を調べるコマンドは free です。

$ free
             total       used       free     shared    buffers     cached
Mem:        192572     190944       1628      54912      20112     126848
-/+ buffers/cache:      43984     148588
Swap:        96384          0      96384

freeコマンドで空きメモリを見るときには、Memのfree項目を見るのではなく、buffers/cacheのfree項目を見ます。
これはLinuxではメモリに空きができるとバッファとキャッシュにメモリを割り当てるため、この2つを加えた値が空きメモリ容量と考えることができます。

つまりこの場合の空き容量は次のようになります。

             total       used       free     shared    buffers     cached
Mem:        192572     190944       1628      54912      20112     126848
-/+ buffers/cache:      43984     148588
Swap:        96384          0      96384

1628+20112+126848 = 148588

メモリー・マネージャーをうまく使うと、メモリリークを調べることができたり、メモリー使用量を追跡・監視することができます。
詳細については、Zend/README.ZEND_MMを参照。

関連記事

スポンサーリンク

DATE_ADD関数 日付を加算する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る