Nasıl LAMP uygulama kapasitesi kaba bir tahmin almak için?

2 Cevap php

Ancak kullanıcı sayısı her geçen gün artıyor, iyi çalışan bir lamba uygulaması var. Ben sürpriz bir sabah ile vurmak istiyorum ve her şeyi çünkü aşırı kırdı bulmuyorum. O anda olan LAMP ne kapasitesi kaba bir tahmin almak için bir yolu var mı?

Ben tam ayrıntılı bir rapor çalışmanın değer pek çok kitap olduğunu biliyorum ama işler iyi çalışıyor olup olmadığını görmek için bazı hızlı turnusol testi alabilirsiniz.

Peki nasıl nasıl daha yük alabilir söyleyebilirim, mysql bileşeni için söylüyor? % 30 kapasite,% 50 mi? vb

Benim apache için aynı. Ben bir duygu olmasına rağmen DB apache önce ölecek.


İngilizce benim anadilim değil gibi belki benim özgün, çok iyi değildi. Ne ben gerçekten soruyorum current yükü ölçmek için bir yoldur. Ve sonra başarısız önce ne kadar ileri gidebilirim ki yüke dayalı tahmin için bir yol var. (Ve bu her bir bileşeni, mysqld, httpd için ayrı ayrı yapılmalıdır)

2 Cevap

Mevcut yük için, sizin yapabileceğiniz bir kaç şey vardır. En pahalı, ama en ayrıntılı cevapları gibi "Gomez" gibi bir kurumsal uygulama yoluyla sağlanacaktır.

Bunu kendiniz yapmak için arıyorsanız Ancak, aşağıda benim önceki cevapları görmek ya da kabuk gibi programları kullanın: htop, üst, w, ve Apache sunucu durumunu kullanmak

Previous answers before question revision:

Ne için soruyorsunuz bazen uygulama profilleme denir.

Sen gibi kaba bellek formül oluşturmak gerekir:

httpd ram + php bellek kullanımı + mysql süreci kullanım = toplam talebi bellek izi

Ayrıca CPU formülü ihtiyacınız olacak, ama aynı zamanda bir yük testi sırasında üst bakışabilirsiniz.

Apache komutu 'ab' vardır.

"Ab Apache Hiper Metin Aktarım Protokolü (HTTP) sunucusu kıyaslama için bir araçtır. Size Mevcut Apache kurulum gerçekleştirir nasıl bir izlenim vermek için tasarlanmıştır. Özellikle saniyede Apache kurulum hizmet edebilen kaç istekleri gösterir. " http://httpd.apache.org/docs/2.0/programs/ab.html

Burada genel bir 'ab' kriter komut satırı:

ab -n 10 -c 1 http://www.yoursite.com/
# qty 10 total requests, 1 request at a time

Strateji tamamlanması ile web sayfası isteği uygulama üzerinde işlem başına (kullanıcı) yük test etmektir. Eğer Apache, PHP, MySQL ve her istek için kullandığı ne kadar ram tespit edebilir, o zaman hızlı bir şekilde sistem kapasitesini belirleyebilir.

Muhtemelen istekleri bir dizi sistemden talep edecek ne bir fotoğrafını çekmek için üst veya iostat veya ps, vb vmstat veya benzeri tanı araçları bir karışımını kullanmak gerekecek.

Finally, you are going to want to install Xdebug. This tool will help you profile the php side of the application. http://xdebug.org/

İşte Xdebug yükleme IBM'in öğretici:

http://www.ibm.com/developerworks/opensource/library/os-php-fastapps2/

ab Siteniz vb çerezleri, ihtiyacı varsa, ab çok basit biraz can sıkıcı.

Temel olarak, birkaç imploding PHP web siteleri sabitleme benim deneyim, genellikle bu gibi gider:

1) İnsanlar MySQL kullanabilirsiniz

Tamamen MySQL, facebook ve flickr kullanabilirsiniz SİZ Gotchas KNOW IF (mysql fanboys bu aşk) bunu:

  • Olmayan bir salt okunur MyISAM tablo ve uzun 100'den herhangi bir sorgu varsa bize (hatta seçer) sen öldün

"Onun site güce ihtiyacı" çünkü sabit bir sitede, adam bir çift dört çekirdekli sunucu kiraladı. Ben onun yerinde bak, ben> 100K üyeleri ve bir lanet Via C7 mikro-yarım-pizzabox sunucuda koştu torrent izleyiciden ile benim önceki sitesinde bakmak, ve ben öyle sitenizin Celeron 300 iyi çalışır, ona benim bodrum, ve hatta overkill, ben lol, senin Xeon yarı fiyatına size kiralayabilirsiniz.

Bu adam iyi bir geliştirici ve gerçek bir güzel adam oldu çıktı ama o MySQL emdi, bu yüzden onun sitesi herhangi bir web sitesine öldürebilir From Hell tipik Arama Sorgusu vardı:

  • Saniyede cehennemden 10 arama sorguları (onun yasadışı warez sitesinde 300K üyeleri gibi oldu)
  • 0.2 saniye - cehennemden arama sorgusu yaklaşık 0.1 sürer
  • baharat şeyler kadar aynı MyISAM tablo eşzamanlı güncellemeleri küçük bir dere

=> Tüm sorulara toplam serileştirme (MyISAM yazma kilitler). 1 çekirdek% 100, 7 çekirdekler boşta, loadavg> 1000 (evet o apache kullanıyordum), sayfa kez> 30 saniye, çalışır.

Fix kolay oldu: InnoDB, lighttpd için anahtarı geçiş, aşağıda) noktası 2 düzeltmek, cehennem arama sorgusu optimize. loadavg 0.02 düştü

2) UPDATE'ler

Noone is interested in page counters. Issue 1 UPDATE for every page view and you are dead. Add some MyISAM for more effects. Also a killer on InnoDB, not about locking, rather about sync disk IO waits.

3) FULLTEXT

  • Çünkü kilitleme okuma-yazma tablolar için kullanışlı değildir MyISAM.
  • MyISAM (aslında, daha az bir ramdisk'in kadar güvenilir ki: sadece MySQL kaza ihtiyacı ya da sadece çok fazla aynı anda vurarak, sen "bilinmeyen tablo motoru hatası" alırsınız MyISAM tabloları bozarak, bozuk bir ramdisk'in bir işletim kaza gerekir, I) Bunu birçok kez gördüm
  • InnoDB mevcut değil FULLTEXT
  • Any insertion in a FULLTEXT index triggers almost a full index rebuild (when I inserted a forum post it was rebuilding 400 MB of index)

Tam metin indeksleme, performans ve güvenilirlik gerekiyorsa ==>, Sfenks ya Xapian kullanın.

Ben Sphinx (insanlar onun hakkında iyi şeyler söylemek) denedim değil, ama Xapian mutlu bir çırpıda metin 4GB arar.

4) İnsanlar apache kullanın.

Bu güzel yukarıdaki noktaları ile birleştirir.

CPU kullanımı mümkün değildir lighttpd gibi uygun bir sunucunun aksine (crummy Via C7 100 HTTP hit / s yapıyordu ve lighttpd'nin% 1'den az CPU kullanılır), apache senin kutu öldürecek.

MySQL (kolayca ölür) ölmeye başladığında, müşteriler sert F5 vurmak başlar ve kısa sürede yaklaşık 1000 apache süreçleri, bir PHP yorumlayıcı tutan her vardır, ve her PHP yorumlayıcı bir MyISAM kilit bekleyen, boşta MySQL bağlantı tutar sayfa görünümü sayaç bazı önemsiz update yapıyor, ama, çünkü sunucu 1000 apache ve php 1000 ve 1000 mysql süreçlerin, öğle takas gitti çünkü bu, biraz zaman alır, biri dışında.

Lighttpd statik sayfalar için hiçbir cpu kullanır. Eğer 20K gibi istekleri / s apachebench ile sert vurdu eğer CPU doyurmak için lighttpd için tek yoldur. Sonra birkaç MySQL bağlantıları konuşmak 10 php-fcgi backendleri (çekirdek başına 2-4 iyidir) gibi, bir kaç Lighttpd konuşur. Her şey bir sonucu olarak çok daha hızlı ve aşırı zaman, değil patlayarak, incelikle düşürür.

Asıl soruya almak için, kesinlikle SQL sorguları profile istiyorum. Sonuna kadar da PHP script başlangıcından itibaren süreyi, (sadece size) sorgularının listesini ve aldıkları zaman görüntüler, ve PHP uygulaması için bir sorgu günlük Ekle (header / footer içeren için iyi bir yer vardır Bu).

Karmaşık bir sayfada (arama hariç) için yaklaşık 3 ms MySQL ve 3 ms PHP, bu iyi bir hedef beklersiniz. Elbette bir PHP kodu derlenmiş önbellek gerekir.