& Bulmak için nasıl

1 Cevap php

Tamam millet,

Biz Windows Server 2003 (Small Business Edition) kutusu üzerindeki mod_php 5.2.9-2 çalışan Apache 2.2.11 var ve yerde yaklaşık 4 RAM 8MB her istek sivri, yaklaşık 2 azat 6MB izledi. Temel olarak, Apache bültenleri miktarı her zaman isteği sırasında ayırdığı miktardan daha (megabayt) özellikle daha az, ve bir kaç saat sonra httpd.exe süreci tüm RAM ve sunucu kilitleniyor tüketen biter.

Bu davranış, doesn't aynı kod temeli ve aşağıdaki yapılandırmaları ile Windows XP geliştirme kutuları üzerinde hiç ortaya:

  • XP / Apache 2.2.11/PHP5.2.9-2/MySQL 5.1.34
  • XP / Apache 2.0.x (çeşitli) / PHP5.2.7/MySQL 5.0.67

Üretim sunucusuna (Win2k3) Basit bir PHP komut örneğin sızıntı görünmüyor:

  • Temel PHP echo işlevler
  • Sınıfları oluşturma ve referans
  • Çıkış tamponlama
  • Kalıcı bağlantıları olan ve olmayan PDO

Bizim tam app çalıştırırken, ancak, işler sızıntı başlar. Ancak kaçak ne olduğunu nasıl öğrenebilirim - Biz aklınıza gelebilecek tek şey bu nesneleri, oturum bilgileri, küresel değişkenlerin kullanımı vardır neden olur? Ve neye sebep oluyor? Çok tek makine aksatmadan biz sorunu üzerinde çoğaltabilirsiniz?

1 Cevap

PHP kendi bellek fonksiyonları vardır, ve nesneleri izlemek için sihirli işlevleri yok __ oluşturabilirsiniz. Ben şahsen, bir test kopyasını size ram izlemek ve artırır veya azaltır nerede görebilirsiniz böylece birkaç düzenleme yapmak istiyorum.

Şahsen ben ilk önce ram artan bir önbelleğe alma sorunu olduğunu kabul olurdu, ama bu sistem kararsız hale eğer o zaman açıkça o kadar kolay değildir.

  echo "Before SomeStrangeObject == ".memory_get_usage()."<br>";
  $x = new SomeStrangeObject();
  echo "During SomeStrangeObject == ".memory_get_usage()."<br>";
  unset($x);
  echo "After SomeStrangeObject == ".memory_get_usage()."<br>";

Ve sadece bariz pırasa arayın. Üzgünüm daha fazla yararlı olamaz.