- Konu sahibi
- #1
İlk ölçüm için Linux sunucuda
Ölçüm yapacağınız sunucuya SSH ile bağlanın.
HTTPS kullanmayan bir adresi ölçerken
Bu ölçümde yönlendirmelerin süresi toplam sonuca eklenir. Yönlendirme olup olmadığını ayrıca incelemek için
Aşağıdaki değerleri birlikte yorumlayın. Sürelerin anlamı, ölçümü sunucunun kendisinden mi yoksa dış ağdaki başka bir makineden mi yaptığınıza göre değişebilir.
İlk byte süresi yüksek, DNS ve bağlantı süreleri düşükse sorun genellikle uygulamanın isteği hazırlamasındadır. Bu durum PHP işlemleri, veritabanı sorguları, dosya erişimi, dış servislere yapılan çağrılar veya sunucu kaynak baskısıyla ilişkili olabilir; tek başına curl çıktısı hangi kod satırının yavaş olduğunu kanıtlamaz. Web sunucusu ve uygulama günlüklerini aynı zaman aralığında inceleyin.
İlk byte hızlı, toplam süre belirgin biçimde yüksekse sunucu yanıtı üretmeye başlamış ancak büyük bir içerik göndermiş olabilir. HTML, görseller, JavaScript veya sıkıştırma ayarlarını kontrol edin. Bu sonuç, sayfanın tarayıcıda tamamen kullanılabilir hâle geldiğini de kanıtlamaz; tarayıcıdaki ek kaynaklar, JavaScript çalışması ve görsel oluşturma süresi ayrıca ölçülmelidir.
DNS veya TCP süresi yüksekse uygulamayı değiştirmeden önce ölçümü farklı bir ağdan tekrarlayın. Sunucunun kendi üzerinden yapılan istek, dış kullanıcıların yaşayacağı ağ gecikmesini göstermez. Dışarıdan yapılan istek ise ağ gecikmesini içerir; bu nedenle uygulamanın gerçek sunucu işlem süresini tek başına ayırmak zorlaşır.
Tek ölçüm yerine aynı URL'yi birkaç kez çalıştırın. Aşağıdaki örnek, varsayımsal olarak on istek gönderir ve her isteğin ilk byte ile toplam süresini ekrana yazar:
İlk istek diğerlerinden belirgin biçimde yavaşsa önbelleğin ısınması, DNS önbelleği veya bağlantı kurulumu etkili olabilir. Tüm istekler benzer biçimde yavaşsa sabit bir uygulama, ağ veya kaynak sorunu araştırılmalıdır. Değerler birbiriyle çok farklıysa yalnızca ortalamaya bakmayın; en yüksek süreyi ve hangi istek sırasında oluştuğunu da dikkate alın. Yoğunluk altındaki davranışı görmek için ayrıca kontrollü yük testi gerekir; bu basit döngü, yük testi değildir.
Önbelleğin etkisini ayırmak için yanıt üstbilgilerini de kaydedebilirsiniz:
Çıktıda
Ölçümü hem sunucunun kendisinden hem de kullanıcıya yakın ayrı bir makineden yapın. Sunucudan yapılan testte DNS, ağ ve dış erişim etkisi azalır; dış testte ziyaretçinin gerçek bağlantı yolu daha iyi temsil edilir. İki sonuç arasındaki fark büyüdükçe ağ, DNS, güvenlik duvarı veya coğrafi uzaklık ihtimali artar.
İlk byte süresi yüksek çıktığında ölçüm saatini, URL'yi, HTTP kodunu, ilk byte ve toplam süre değerlerini kaydedin. Aynı anda CPU, bellek, disk bekleme, PHP-FPM veya benzeri uygulama süreçleri ve veritabanı günlüklerini karşılaştırın. Belirli bir istek türünde hata oluşuyorsa yalnızca ana sayfayı değil, yavaş olduğu görülen URL'yi ve mümkünse istek zamanını paylaşarak uygulama veya sunucu desteği isteyin. Oturum çerezleri, erişim belirteçleri ve kişisel verileri tanılama çıktısına eklemeyin.
Ölçümden sonra web sunucusu günlüklerine geçici ayrıntılı zamanlama kaydı eklediyseniz işiniz bittiğinde gereksiz ayrıntılı kaydı kapatın. Yanıt süresini kalıcı olarak değerlendirmek için aynı URL, aynı protokol ve mümkün olduğunca aynı ölçüm noktalarıyla düzenli aralıklarla kayıt tutun; aksi hâlde farklı ağ koşullarını uygulamadaki değişikliklerle karıştırabilirsiniz.
curl kullanın. Komut, DNS çözümleme, TCP bağlantısı, TLS el sıkışması, sunucunun ilk yanıtı ve toplam indirme süresini ayrı ayrı gösterir. Böylece gecikmenin ağdan mı, HTTPS işleminden mi, uygulamanın yanıt üretmesinden mi yoksa sayfanın indirilmesinden mi kaynaklandığını ayırabilirsiniz. Ölçümü aynı URL için birkaç kez tekrarlayıp ortalama ve en yüksek değerleri karşılaştırın; tek bir sonuç kesin performans göstergesi değildir.curl ile temel yanıt süresini ölçme
Ölçüm yapacağınız sunucuya SSH ile bağlanın.
curl kurulu değilse kullandığınız dağıtımın paket yöneticisiyle kurun. Ardından örnek URL yerine ölçmek istediğiniz sayfanın adresini yazarak şu komutu çalıştırın:
Bash:
curl -o /dev/null -s -w 'DNS: %{time_namelookup}s\nTCP: %{time_connect}s\nTLS: %{time_appconnect}s\nİlk byte: %{time_starttransfer}s\nToplam: %{time_total}s\nHTTP kodu: %{http_code}\n' https://www.ornek-site.tld/
-o /dev/null yanıt gövdesini kaydetmeden atar, -s ilerleme çıktısını gizler, -w ise seçtiğiniz süreleri yazdırır. Komutun sonunda HTTP durum kodu da görünür. Örneğin varsayımsal olarak Toplam: 0.842s ve İlk byte: 0.310s görürseniz sunucu ilk yanıtı yaklaşık 310 milisaniyede üretmiş, yanıtın tamamı ise 842 milisaniyede indirilmiş demektir.HTTPS kullanmayan bir adresi ölçerken
TLS değeri anlamlı olmayabilir. HTTPS yönlendirmesini de ölçmek istiyorsanız -L seçeneğini ekleyin:
Bash:
curl -L -o /dev/null -s -w 'HTTP kodu: %{http_code}\nİlk byte: %{time_starttransfer}s\nToplam: %{time_total}s\n' https://www.ornek-site.tld/
Bu ölçümde yönlendirmelerin süresi toplam sonuca eklenir. Yönlendirme olup olmadığını ayrıca incelemek için
-I ile yalnızca HTTP üstbilgilerini isteyebilirsiniz; ancak bu istek, normal sayfa isteğiyle her sunucuda tamamen aynı davranmayabilir. Gerçek kullanıcı isteğine daha yakın karşılaştırma için normal GET ölçümünü esas alın.Çıktıdaki süreler neyi gösterir?
Aşağıdaki değerleri birlikte yorumlayın. Sürelerin anlamı, ölçümü sunucunun kendisinden mi yoksa dış ağdaki başka bir makineden mi yaptığınıza göre değişebilir.
| Değer | Ne ölçer? | Yüksekse ilk kontrol |
|---|---|---|
| DNS | Alan adının IP adresine çevrilme süresi | DNS hizmeti, kayıtlar ve ölçüm noktasının ağı |
| TCP | Sunucuyla TCP bağlantısının kurulma süresi | Ağ yolu, güvenlik duvarı ve sunucuya uzaklık |
| TLS | HTTPS bağlantısının kurulma süresi | TLS yapılandırması, CPU yükü ve bağlantı yeniden kullanımı |
| İlk byte | İstek gönderildikten sonra ilk yanıt byte'ının gelmesine kadar geçen süre | Web sunucusu, PHP/uygulama, veritabanı ve dış API çağrıları |
| Toplam | İsteğin başlangıcından yanıtın tamamının alınmasına kadar geçen süre | İçerik boyutu, sıkıştırma, istemci ağı ve indirme hızı |
İlk byte hızlı, toplam süre belirgin biçimde yüksekse sunucu yanıtı üretmeye başlamış ancak büyük bir içerik göndermiş olabilir. HTML, görseller, JavaScript veya sıkıştırma ayarlarını kontrol edin. Bu sonuç, sayfanın tarayıcıda tamamen kullanılabilir hâle geldiğini de kanıtlamaz; tarayıcıdaki ek kaynaklar, JavaScript çalışması ve görsel oluşturma süresi ayrıca ölçülmelidir.
DNS veya TCP süresi yüksekse uygulamayı değiştirmeden önce ölçümü farklı bir ağdan tekrarlayın. Sunucunun kendi üzerinden yapılan istek, dış kullanıcıların yaşayacağı ağ gecikmesini göstermez. Dışarıdan yapılan istek ise ağ gecikmesini içerir; bu nedenle uygulamanın gerçek sunucu işlem süresini tek başına ayırmak zorlaşır.
Aynı isteği tekrarlayarak karşılaştırma
Tek ölçüm yerine aynı URL'yi birkaç kez çalıştırın. Aşağıdaki örnek, varsayımsal olarak on istek gönderir ve her isteğin ilk byte ile toplam süresini ekrana yazar:
Bash:
for i in $(seq 1 10); do
curl -o /dev/null -s -w "İstek $i | İlk byte: %{time_starttransfer}s | Toplam: %{time_total}s | HTTP: %{http_code}\n" https://www.ornek-site.tld/
done
İlk istek diğerlerinden belirgin biçimde yavaşsa önbelleğin ısınması, DNS önbelleği veya bağlantı kurulumu etkili olabilir. Tüm istekler benzer biçimde yavaşsa sabit bir uygulama, ağ veya kaynak sorunu araştırılmalıdır. Değerler birbiriyle çok farklıysa yalnızca ortalamaya bakmayın; en yüksek süreyi ve hangi istek sırasında oluştuğunu da dikkate alın. Yoğunluk altındaki davranışı görmek için ayrıca kontrollü yük testi gerekir; bu basit döngü, yük testi değildir.
Önbelleğin etkisini ayırmak için yanıt üstbilgilerini de kaydedebilirsiniz:
Bash:
curl -s -D - -o /dev/null -w 'İlk byte: %{time_starttransfer}s\nToplam: %{time_total}s\n' https://www.ornek-site.tld/
Çıktıda
Cache-Control, Age, ETag veya sağlayıcıya özgü önbellek başlıkları bulunabilir. Önbellekten gelen hızlı bir yanıt, ziyaretçinin her istekte aynı süreyi alacağını göstermez; önbellek dışı ilk istek için uygulama ve veritabanı yolu ayrıca incelenmelidir.Sonucu doğrulamak için izlenecek yol
Ölçümü hem sunucunun kendisinden hem de kullanıcıya yakın ayrı bir makineden yapın. Sunucudan yapılan testte DNS, ağ ve dış erişim etkisi azalır; dış testte ziyaretçinin gerçek bağlantı yolu daha iyi temsil edilir. İki sonuç arasındaki fark büyüdükçe ağ, DNS, güvenlik duvarı veya coğrafi uzaklık ihtimali artar.
İlk byte süresi yüksek çıktığında ölçüm saatini, URL'yi, HTTP kodunu, ilk byte ve toplam süre değerlerini kaydedin. Aynı anda CPU, bellek, disk bekleme, PHP-FPM veya benzeri uygulama süreçleri ve veritabanı günlüklerini karşılaştırın. Belirli bir istek türünde hata oluşuyorsa yalnızca ana sayfayı değil, yavaş olduğu görülen URL'yi ve mümkünse istek zamanını paylaşarak uygulama veya sunucu desteği isteyin. Oturum çerezleri, erişim belirteçleri ve kişisel verileri tanılama çıktısına eklemeyin.
Ölçümden sonra web sunucusu günlüklerine geçici ayrıntılı zamanlama kaydı eklediyseniz işiniz bittiğinde gereksiz ayrıntılı kaydı kapatın. Yanıt süresini kalıcı olarak değerlendirmek için aynı URL, aynı protokol ve mümkün olduğunca aynı ölçüm noktalarıyla düzenli aralıklarla kayıt tutun; aksi hâlde farklı ağ koşullarını uygulamadaki değişikliklerle karıştırabilirsiniz.