"Zend_mm_heap bozuk" ne

23 Cevap php

Tüm ani ben daha önce hiç ettik benim uygulamada sorunlarla sahip oldum. Ben Apache hata günlüğünü kontrol karar verdi, ve ben "bozuk zend_mm_heap" diyerek bir hata mesajı buldum. Bu ne anlama geliyor.

OS: Fedora Core 8 Apache: 2.2.9 PHP: 5.2.6

23 Cevap

çok deneme yanılma sonra ben php.ini dosyasında output_buffering = değerini artırmak eğer, bu hata kaybolduktan bulundu

unset() s edin. Emin olun yapmanız $this (veya eşdeğerleri) Yıkıcılar ve bu unset() s yıkıcılar olarak için başvuru sayısı neden olmaz değil unset() referanslar 0'a düşmesi aynı nesne. Biraz araştırma yaptım ve genellikle yığın bozulmasına neden olur ne buldum.

Bir PHP bug report about the zend_mm_heap corrupted hata var. Bunu yeniden nasıl [2011-08-31 07:49 UTC] f dot ardelian at gmail dot com Bir örnek için yorum bakın.

Ben tüm diğer "çözüm" (değişim php.ini, az modülleri, vb kaynak PHP derlemek) sadece sorunu gizlemek bir his var.

Linux kutusunda, komut satırında bu denerseniz

export USE_ZEND_ALLOC=0

Benim durumumda, bu hata için neden dizilerin biri çok büyük hale oldu. Ben her yineleme diziyi sıfırlamak için benim komut dosyası kurdum ve bu sorunu sınıflandırılmaktadır.

Ben sadece kendi bir sunucuda da bu sorunu vardı ve kök neden APC oldu. Apache yeniden php.ini dosyasındaki "apc.so" uzantısı, dışarı yorumladı ve siteler hemen geri geldi.

Bana yardımcı yalnızca config ayarı, - yukarıda ve zend.enable_gc = 0 Her şeyi denedim.

(Dahili: 13 Haziran 2012 17:19:58) Suhosin-Patch (cli) ile PHP 5.3.10-1ubuntu3.2

Ben burada bir cevap vardır sanmıyorum, bu yüzden benim deneyim ekleyeceğiz. Ben rastgele httpd sırasında parçalama arızası ile birlikte bu aynı hatayı gördük. Bu bir cPanel sunucu oldu. Söz semptom apache rastgele (krom alınan hiçbir veri, veya bağlantı firefox sıfırlandı) bağlantısını sıfırlamak oldu. Çalıştı çoğu zaman, bazen etmedi - bu görünüşte rasgele idi.

Ben sahne çıktı tamponunun üzerine geldi OFF oldu. Çıkış tamponlama ima Konuyu, okuyarak, ben ne olacağını görmek için (= 4096) bunu açık. Bu noktada, onlar all hataları göstermeye başladı. Bu hata artık tekrarlanabilir olduğunu olmak iyi oldu.

Ben geçti ve uzantıları devre dışı bırakma başladı. Bunlar arasında, eaccellerator, PDO, ioncube yükleyici, ve looked şüphe, ama hiçbiri yardım bol.

Sonunda cPanel-kolay-yükleyici modülü çeşit görünüyor "homeloader.so" olarak yaramaz PHP uzantısı bulunamadı. Çıkarılmasından sonra, ben başka sorunlar yaşamamış.

O notta, bu yüzden milage bu cevapların tümü ile değişir bu bir genel hata iletisi görüntülenir, eylem iyi ders alabilir:

  • Hata tekrarlanabilir (hangi koşullar?) Her zaman yapmak
  • Ortak faktör bul
  • Seçici devre dışı herhangi bir PHP modülleri, seçenekleri, vb (ya da, bir acele iseniz, tüm bunları o yardımcı olur, daha sonra seçici tekrar kopana kadar onları yeniden etkinleştirmek görmek için devre dışı)
  • Bu yardım için başarısız olursa, bu cevapların çoğu bu kod releated olabileceğini işaret ediyor. Yine, önemli hata tekrarlanabilir every request böylece daraltmak olabilir yapmaktır. Eğer bir kod parçası bu yapıyor şüpheleniyorsanız hata tekrarlanabilir sonra hata durana kadar, bir kez daha, sadece kodunu kaldırın. Durana sonra, size kaldırıldı kod son parçası suçlu olduğunu biliyorum.

Yukarıdaki tüm başarısız, ayrıca gibi şeyler deneyebilirsiniz:

  • PHP Yükseltme veya recompiling. Sorununuz sabit neden ne olursa olsun hata umuyoruz.
  • Farklı (test) çevreye kodunuzu taşıyın. Bu sorunu çözmezse, ne değişti? php.ini seçenekleri? PHP version? vs ..

İyi şanslar.

Arabelleğe kullanan herhangi bir modül için bakmak ve seçici devre dışı bırakın.

Ben CentOS 4.8 üzerinde PHP 5.3.5 çalıştırıyorum ve bu yaptıktan sonra ben eaccelerator gerekli bir yükseltme bulundu.

Ben memcached oturumları için session.save_path için yanlış bir IP vardı ben bu aynı sorunu vardı ve. Doğru IP bunu değiştirerek sorunu giderildi.

olabilir söylemek için çok erken, ancak devre dışı APC benim için çok çalıştı.

Benim için sorun PDO_MYSQL kullanıyordum. Sorgu 1960 sonuç vermedi. Ben 1900 kayıtları döndürmek için çalıştı ve çalışıyor. Yani sorun pdo_mysql ve çok büyük bir dizidir. Ben orijinal mysql uzantısı ile sorgu yeniden yazdı ve çalıştı.

$link = mysql_connect('localhost', 'user', 'xxxx') or die(mysql_error());
mysql_select_db("db", $link);

Apache Önceki hataları rapor vermedi.

zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
[Mon Jul 30 09:23:49 2012] [notice] child pid 8662 exit signal Segmentation fault (11)
[Mon Jul 30 09:23:50 2012] [notice] child pid 8663 exit signal Segmentation fault (11)
[Mon Jul 30 09:23:54 2012] [notice] child pid 8666 exit signal Segmentation fault (11)
[Mon Jul 30 09:23:55 2012] [notice] child pid 8670 exit signal Segmentation fault (11)

Ben PHP için Mongo 2.2 sürücüsünü kullanarak bu hata vardı:

$collection = $db->selectCollection('post');
$collection->ensureIndex(array('someField', 'someOtherField', 'yetAnotherField')); 

^ ^ DOESNT'İŞ

$collection = $db->selectCollection('post');
$collection->ensureIndex(array('someField', 'someOtherField')); 
$collection->ensureIndex(array('yetAnotherField')); 

^ ^ İŞLER! (!)

Ben bir hafta boyunca, bu benim için çalıştı, bu konu ile çekişti, veya en azından öyle görünüyor

In php.ini bu değişiklikleri yapmak

report_memleaks = Off  
report_zend_debug = 0  

Benim set up

Linux ubuntu 2.6.32-30-generic-pae #59-Ubuntu SMP  
with PHP Version 5.3.2-1ubuntu4.7  

Bu işe yaramadı.

So I tried using a benchmark script, and tried recording where the script was hanging up. I discovered that just before the error, a php object was instantiated, and it took more than 3 seconds to complete what the object was supposed to do, whereas in the previous loops it took max 0.4 seconds. I ran this test quite a few times, and every time the same. I thought instead of making a new object every time, (there is a long loop here), I should reuse the object. I have tested the script more than a dozen times so far, and the memory errors have disappeared!

Benim için, bu bellek sızıntısı nedeniyle ve çökmesine MemoryManager cuased o ZendDebugger oldu.

Onu devre dışı ve ben şu anda yeni bir sürümü arıyorum. Ben birini bulamazsa, ben xdebug geçmek için gidiyorum ...

Ben buna bir çözüm bulamadılar çünkü benim LAMP ortamı yükseltmeye karar verdi. Ben PHP 5.3.x. ile Ubuntu 10.4 LTS gitti Bu benim için sorun durmuş gibi görünüyor.

Benim durumumda, ben kodu aşağıdaki unuttum:

);

Ben etrafında oynanan ve orada burada kodu unuttum - Bazı yerlerde ben yığın yolsuzluk var, bazı durumlarda sadece düz ol 'seg hatası:

[Wed Jun 08 17:23:21 2011] [notice] child pid 5720 exit signal Segmentation fault (11)

Ben mac 10.6.7 ve xampp gidiyorum.

Eğer özellikleri kullanıyorsanız ve özellik (autoloading durumunda yani) sınıftan sonra yüklenirse önceden özelliği yüklemeniz gerekir.

https://bugs.php.net/bug.php?id=62339

Not: Bu hata çok çok rastgele; nedeniyle bu doğanın.

Ben de bu hatayı fark etti ve '&' kullanır sigsegv koşu eski kod ettik PHP 5.2 + çalışan ise açıkça referansları zorlamak.

Ayarı

assert.active = 0 

php.ini içinde (o php5UTF8 kütüphanede tip iddialar kapalı ve zend_mm_heap corrupted gitti) benim için yardımcı

PHP 5.3 üzerinde, çok 'aramalardan sonra, bu benim için çalıştı çözümdür:

Ben ekleyerek disabled the PHP garbage collection Bu sayfa için ettik:

<? gc_disable(); ?>

sorunlu sayfanın sonuna kadar, tüm hataları yok etti.

source.

PHP memcached oturum bilgilerini depolamak için yapılandırılmış gibi benim için sorun memcached cini çöktü. % 100 cpu yeme ve garip davranıyordu. Memcached restart sorunu gitti sonra.

Ben bir php uzantısı yazma ve de bu sorunla karşılaşırsanız duyuyorum. Benim uzantısı karmaşık parametreler ile bir extern işlevini çağırdığınızda, bu hata açılır.

Nedeni extern fonksiyonu bir parametre (char *) benim tahsis değil bellektir. Eğer uzatma aynı tür yazıyorsanız, bu dikkat ediniz.

Ben neden bir sürü bu soruna neden olabilir düşünüyorum. Ve benim durumumda, ben 2 sınıfları aynı isim isim, ve bir başka yüklemeye çalışacağız.

class A {} // in file a.php
class A // in file b.php
{
  public function foo() { // load a.php }
}

Ve benim durumumda bu soruna neden olur.

(: Gerçek tohum php esnaf db çalışan, laravel çerçevesini kullanma)