Crank ile SignalR Bağlantı Yoğunluğu Testi

yazan: Tom FitzMacken

Uyarı

Bu belgeler SignalR'nin en son sürümüne yönelik değildir. SignalR ASP.NET Core göz atın.

Bu makalede, bir uygulamayı birden çok sanal istemciyle test etmek için Crank aracının nasıl kullanılacağı açıklanmaktadır.

Uygulamanız barındırma ortamında (Azure web rolü, IIS veya Owin kullanarak şirket içinde barındırılan) çalıştırıldıktan sonra, Crank aracını kullanarak uygulamanın yüksek düzeyde bağlantı yoğunluğuna verdiği yanıtı test edebilirsiniz. Barındırma ortamı bir Internet Information Services (IIS) sunucusu, bir Owin konağı veya bir Azure web rolü olabilir. (Not: Performans sayaçları Azure App Service Web Apps kullanılamaz, bu nedenle bağlantı yoğunluğu testinden performans verileri alamazsınız.)

Bağlantı Yoğunluğu, bir sunucuda kurulabilecek eşzamanlı TCP bağlantılarının sayısını ifade eder. Her TCP bağlantısı kendi ek yüküne neden olur ve çok sayıda boşta bağlantı açılması sonunda bir bellek performans sorununa neden olur.

SignalR kod tabanı,Crank adlı bir yük test aracı içerir. Crank'in en son sürümü GitHub'daki Geliştirme dalında bulunabilir. SignalR kod tabanının Geliştirme dalının Zip arşivini buradan indirebilirsiniz.

Krank, sunucu donanımında mümkün olan toplam boş bağlantı sayısını hesaplamak için sunucunun belleğini tam olarak doymak için kullanılabilir. Alternatif olarak, belirli bir sayıya veya belirli bir bellek eşiğine ulaşılana kadar bağlantıları artırarak sunucuyu belirli bir bellek baskısı altında yüklemek için Crank kullanabilirsiniz.

Test sırasında, kaynaklar (tcp bağlantıları ve bellek) için herhangi bir rekabetten kaçınmak için uzak istemciler kullanmak önemlidir. İstemcileri izleyerek sunucunun tam kapasiteye (bellek veya CPU) ulaşmasını engelleyebilecek herhangi bir performans sorunuyla karşılaşılmadığından emin olun. Sunucuyu tam olarak yüklemek için istemci sayısını artırmanız gerekebilir.

Bağlantı Yoğunluğu Testi Çalıştırma

Bu bölümde SignalR uygulamasında bağlantı yoğunluğu testi çalıştırmak için gereken adımlar açıklanmaktadır.

  1. SignalR kod tabanının Geliştirme dalını indirin ve derleyin. Komut isteminde project directory>\src\Microsoft.AspNet.SignalR.Crank\bin\debug adresine gidin<.
  2. Uygulamanızı hedeflenen barındırma ortamına dağıtın. Uygulamanızın kullandığı uç noktayı not edin; örneğin, Başlarken öğreticisinde oluşturulan uygulamada uç nokta şeklindedir http://<yourhost>:8080/signalr.
  3. SignalR performans sayaçlarını sunucuya yükleyin. Uygulamanız Azure'da çalışıyorsa bkz. Azure Web Rolünde SignalR Performans Sayaçlarını Kullanma.

Kod tabanını indirip derledikten ve konağınıza performans sayaçlarını yükledikten sonra Crank komut satırı aracı klasöründe bulunabilir src\Microsoft.AspNet.SignalR.Crank\bin\Debug .

Krank aracı için kullanılabilir seçenekler şunlardır:

  • /?: Yardım ekranını gösterir. Url parametresi atlanırsa kullanılabilir seçenekler de görüntülenir.
  • /Url: SignalR bağlantılarının URL'si. Bu parametre zorunludur. Varsayılan eşlemeyi kullanan bir SignalR uygulaması için yol "/signalr" ile biter.
  • /Transport: Kullanılan taşımanın adı. Varsayılan değer, kullanılabilir en iyi protokolü seçecek olan şeklindedir auto. WebSocketsServerSentEventsInternet Explorer yerine .NET istemcisi kullanıldığından , ve LongPolling (ForeverFrame seçenekleri, Crank için bir seçenek değildir). SignalR'nin aktarımları nasıl seçtiği hakkında daha fazla bilgi için bkz . Aktarımlar ve Geri Dönüşler.
  • /BatchSize: Her toplu iş için eklenen istemci sayısı. Varsayılan değer 50'dir.
  • /ConnectInterval: Bağlantı ekleme arasındaki milisaniye cinsinden aralık. Varsayılan 500’dür.
  • /Connections: Uygulamayı yük test etmek için kullanılan bağlantı sayısı. Varsayılan değer 100.000'dir.
  • /ConnectTimeout: Testi durdurmadan önce saniyeler içinde zaman aşımı. Varsayılan değer 300'dür.
  • MinServerMBytes: Ulaşacak en düşük megabayt sunucu. Varsayılan 500’dür.
  • SendBytes: Sunucuya gönderilen yükün bayt cinsinden boyutu. Varsayılan değer, 0'dur.
  • SendInterval: Sunucuya gönderilen iletiler arasındaki milisaniye cinsinden gecikme. Varsayılan 500’dür.
  • SendTimeout: Sunucuya gönderilen iletiler için milisaniye cinsinden zaman aşımı. Varsayılan değer 300'dür.
  • ControllerUrl: Bir istemcinin bir denetleyici hub'ını barındıracağı Url. Varsayılan değer null (denetleyici hub'ı yok). Denetleyici hub'ı, Crank oturumu başladığında başlatılır; kumanda hub'ı ile Krank arasında daha fazla temas kurulmamasını sağlar.
  • NumClients: Uygulamaya bağlanacak sanal istemcilerin sayısı. Varsayılan değer birdir.
  • Logfile: Test çalıştırması için günlük dosyasının dosya adı. Varsayılan değer: crank.csv.
  • SampleInterval: Performans sayacı örnekleri arasındaki milisaniye cinsinden süre. Varsayılan değer 1000’dir.
  • SignalRInstance: Sunucudaki performans sayaçlarının örnek adı. Varsayılan, istemci bağlantı durumunu kullanmaktır.

Örnek

Aşağıdaki komut, 8080 numaralı bağlantı noktasında 100 bağlantı kullanarak "ControllerHub" adlı hub'a sahip bir uygulamayı barındıran Azure'da adlı pfsignalr bir siteyi test eder.

crank /Connections:100 /Url:http://pfsignalr.cloudapp.net:8080/signalr