Verimlilik, Kıyaslama, Hız testi, Performans

5 Cevap php

Kimin verimlilik ben ölçmeye çalışıyorum bir senaryo yazmaya çalışıyorum. Ben bir kaç soru var: -

  1. Küçük uygulamalar için, profil bu tür gereklidir? Yoksa paranoyak alıyorum? (En çok kod varsayarak terbiyeli verimli / hayır sonsuz döngüler)
  2. Bu ne kriter gerekir Karşı? Ne karşı karşılaştırmak gerekir?
  3. Aşağıda ab den aldım verimlilik çıktı. Bu yol çok kapalı mı? Ben bu uygulamayı tasarlarken yanlış yönde ilerliyor muyum? Ben farkında olmalıdır herhangi bir uyarı sinyalleri var mı?
abs -n10000 -c100 http://localhost/testapp

This is ApacheBench, Version 2.3 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.10
Server Hostname:        localhost
Server Port:            80

Document Path:          /testapp
Document Length:        525 bytes

Concurrency Level:      100
Time taken for tests:   33.608 seconds
Complete requests:      10000
Failed requests:        5179
   (Connect: 0, Receive: 0, Length: 5179, Exceptions: 0)
Write errors:           0
Total transferred:      6973890 bytes
HTML transferred:       5253890 bytes
Requests per second:    297.55 [#/sec] (mean)
Time per request:       336.080 [ms] (mean)
Time per request:       3.361 [ms] (mean, across all concurrent requests)
Transfer rate:          202.64 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.5      0     109
Processing:     8  334 403.9    176    3556
Waiting:        7  334 403.9    176    3556
Total:          9  335 403.8    177    3556

Percentage of the requests served within a certain time (ms)
  50%    177
  66%    296
  75%    415
  80%    519
  90%    842
  95%   1141
  98%   1615
  99%   1966
 100%   3556 (longest request)

Ben senaryoyu yazmak için PHP kullanıyorum. Daha fazla test, ben de benim PHP komut MySQL bağlantı parçasını yorumum ise "Başarısız istekler" 0 olur bulundu. Ne yanlış? Nasıl bu başarısızlık oranı azaltmak mı?

Thank you, Alec

5 Cevap

100 eşzamanlı isteklerini bekliyor musunuz? Eğer 30 saniye içinde 10K isteklerini almak için bekliyor musunuz?

Size bu kriter çalıştırmak, fakat ne anlama geldiğini kendinize sorabilirsiniz harika. Eğer alan olacak, gerçek trafik miktarı hakkında düşünün. Eğer gerçekten karşı kriter bir soru gerekir:

  • Ben sitemde 3000 kullanıcıya sahip olacağını bekliyoruz.
  • Ben yoğun kullanım sırasında, bunların 500 sayfa isabet olacağını bekliyoruz
  • Bir tipik kullanımı bir dakika içinde 3 istekleri: 3 * 500 / 60 = ~ 25 req/sec
  • Sitem (

Eğer web top az yüzde değilseniz, sizin sayfa gerçek hayatta 100 eşzamanlı istekleri görmezsiniz. Bu trafik düzeyi için ayarlamak sitenizi mantıklı değil. Bu numaraları vurmak için, mimari düzeyde tasarım tavizler vermek gerekir (veritabanı kullanımı, önbelleğe alma yöntemleri, vb: başarısızlık dolayısıyla sayıda veritabanı üzerinde).

Yalnızca komut profile çalışıyorsanız, sizin kod zamanı harcama nerede xdebug bulmak için kullanabilirsiniz.

Bu büyük bir iş gibi görünüyor düşünüyorum. Yolu kapalı? Ben bu şekilde norm yukarıda olduğunu söyleyebilirim.

Bir soru sunucuda yük üretimde olacak budur. Script bu sunucuda istekleri ateş, ancak bir gelişme örneği yalnızca kullanıcı iseniz bunu tipik bir üretim yükü işleme ederken size üretim sunucuyu vurdu ne olur göremiyoruz.

Bu durum buysa, istek İKİ kaynaklarına ihtiyaç: Yeni app temsil ve diğeri bu kaynaklar için rekabet edeceğiz üretim süreçleri için.

Eğer kriter yazılım eşzamanlı kullanıcı # ayarlayabilir miyim? Bu test sadece 1000 istekleri kapalı birbiri ardına gönderiyor mu? Aynı zamanda sunucu üzerinde beceriyor birden fazla kullanıcı olması daha gerçekçi olabilir.

Eğer gönderme aralığı rastgele yapabilir miyim? Bu senin gerçek durumun daha iyi temsil olabilir.

Eğer komut kullandığı verileri değişebilir? O çok iyi kullanılabilir olacak hangi koşullar altında temsil ediyor mu?

Bunun dışında, tüm önerebileceğim benim tebrikler. Bana çok kapsamlı olmak gibi görünüyor.

Siz herhangi bir başarısız istekleri almak olmamalı - Eğer onlar başarısız konum neden görmek için hata günlüğünü kontrol etmeniz gerekir.

Bu MySQL bağlantı tükeniyor olması en olasıdır, bu durumda sadece ayar sunucu izin can aynı anda daha fazla bağlantı (trafik bu miktar bekliyoruz).

Try using xdebug to profile your code. xdebug will also give you better on-screen errors & stack traces.

Sonra webgrind güzel bir biçimde profilini görüntülemek için kullanın.

~ Request başına 200ms bir sayfa kullanıcıların çoğunluğu için 'hızlı' gibi görünen hangi biraz ortak sayıdır.