Nasıl HTML hız üzerinden PHP artırmak için?

4 Cevap php

I Memcached adlı HTML alır ve kullanıcıya hizmet veren bir PHP dosyası var. Ben bu gibi test zaman:

ab-n 1000-c 100 http://website.com/test.php

Bu saniyede 22 isteklerini yapar.

Ama ben bir HTML dosyası için aynı HTML koymak ve bu testi yaptığınızda:

ab-n 1000-c 100 http://website.com/test.html

Ben Saniyede 4500 istekleri gibi olsun.

Ben ilk kez HTML üretmek gerekir, çünkü PHP ayrılmamak gerekir, ve bir sonraki kez ben sadece Memcached oluşturulan bir tane olsun. Ve dahası ben gösterilecek HTML ($ _GET dayalı tanınan ['user_id'] değeri) her kullanıcı için farklıdır. RPS yüksek yapmak için herhangi bir yolu var mı? Düz HTML hizmet Closer?

Ben web sunucusu olarak lighttpd kullanın.

4 Cevap

Chain of thoughts (to be continued....):
First I would test if the problem is triggered by or significantly worsened by concurrency. With your -n 1000 -c 100 test you had a ratio of 22/4500. What about -n 1000 -c 10 or -n 1000 -c 1?

Sonra bellek tüketimi, disk I / O ve CPU kullanımı takip + tekrar aynı denemek istiyorsunuz. Bu herhangi bir clearly sınırlayıcı faktördür?

Sonra basit bir PHP komut test ediyorum:

  • boş bir komut dosyası
  • ?
  • hiçbir komut, ancak test.html test.php üzerine kopyalanan içeriği
  • sadece küçük bir Memcached öğe hizmet. Mümkün olduğunca, Memchached nesne oluşturmak ve bir öğeyi, hayır testi, hiçbir sona erme, hiçbir eklenti, sadece echo $mc->get(string $key) almak gibi basit bir betik

Nasıl bu test.html farklar nelerdir?

Edit:

Adlı bir karşılaştırma noktası olarak Web Server Performance Comparison: LiteSpeed 2.0 VS alalım. Gösterge başka bir web sunucusu ürün "rakip" "için" yapılan, ancak şu an için Hadi onlar ;-) (çok) önyargılı değildi varsayalım edildi

Bir vardı

  • İşlemci: Tek Intel Xeon 2.4 GHz/533 MHz FSB/512 KB L2 Cache
  • Hafıza: 256 MB ECC PC2700
  • Sabit Disk: 36 GB 10K RPM SCSI disk Seagate ST336607LW
  • NIC: kurulu Intel PRO/1000 Gigabit Bağdaştırıcısı'nda

LightHTTPD 15475 100 bayt saniyede dosyaları, komut ikinci ve saniyede 399 kez phpinfo.php başına helloworld.php 1593 kez (iki FastCGI). Görev Bu bir ~ 1:10 (merhaba dünya) oranı 1:40 (Phpinfo) bulunuyor. "Sizin" oranı 22:4500 ~ 1:200 olduğunu. Script değiştiğinde Ve hatta yabancı o değişmez. Sizin "gerçek" komut dosyası veya boş bir PHP komut dosyası olursa olsun, her zaman 01:22. Bu "tuhaflık faktörü" biraz (testler aynı olmasa bile) yükseltir.

First of all I would double-check if PHP was compiled with FastCGI support, see http://www.fastcgi.com/docs/faq.html#PHP. Then I'd test "my" lighthttpd with a simple C/C++ FastCGI program as mentioned in the test, a real simple "hello world". There's an example at http://www.fastcgi.com/devkit/doc/fastcgi-prog-guide/ch2c.htm#4263. If this scales "well", i.e. significantly better than your PHP FastCGI, I'd try it with a "barely running" PHP version, i.e. compiled with --disable-all and only those modules (re)actived and built-in that are necessary to start PHP and let it print "hello world". Also use the default php.ini. Does this change anything?

Hızlı komut daha Oluyor?

Düz HTML dosyaları yazma ve bu hizmet deneyin. Eğer gerçekten böyle hıza ihtiyacınız varsa ve bir "güncelleme" zaman zaman HTML dosyalarını günceller komut dosyası veya belirli bir olay üzerinde yapmak.

Bazı yerlerde SSI kullanmayı deneyin ve nasıl çalıştığını görmek (http://httpd.apache.org/docs/1.3/howto/ssi.html).

Komut çözümleyici hızlandırmak için eaccelerator (http://eaccelerator.net/) veya APC (http://www.php.net/apc/) kullanmayı deneyin, ama Php5 harikalar yapmayacağım ...

Fiziksel sunucu (FAST sert RAM çok, çoklu-işlemci, sürücü) yeterli boş kaynak olduğundan emin olun.

Bu komut HTML sayfası daha yavaş olduğunu gayet normal :) HTML sayfası kadar hizmet demektir, basit bir copy-of-dosya-over-the-wire. PHP komut dosyası, komut dosyası altyapısı, önbelleğe alma başlatılırken sınıflar, fonksiyonlar, bellek ayırmalarını, session locking/unlocking ayrıştırma ve tasarruf, Memcached sunucudan okuma, yapılandırma dosyaları okuma anlamına gelir. Istekleri her biri için.

Ayrıca PHP sunucusunun önünde bir HTTP önbelleği koyarak düşünebilirsiniz. Bu, web sunucusu üzerindeki yükü azaltacak ve sizin için önceden oluşturulan sayfaların yeniden gönderme idare edecek.

Varnish, örneğin bkz. Başka bir seçenek Squid olduğu

Paylaşımlı hosting üzerinde ise Açıkçası bu seçenek değildir -. Bu durumda html dosyalarına render harika bir çözümdür.

Sen (pseudo code) deneyebilirsiniz:

if file myfilecache/$user_$request_$today.html does not exist 
then do
     format page 
     write page to myfilecache/$user_$request_$today.html
done
redirect to myfilecache/$user_$request_$today.html

Dosya sistemi oldukça iyi bir önbellek ve lightpd sayfasını hizmet fiili çalışma yapacak yapar.