Bazı insanlar iki konu çok fazla olduğunu söyleyebilirim - Ben o kampta değilim :-)
İşte tavsiyem: ölçü, tahmin etme. Bir öneri yapılandırılabilir hale getirmek ve başlangıçta 100'e ayarlamak, daha sonra yazılımınızı wild'a bırakın ve ne olduğunu izlemek.
İplik kullanımınız 3'te zirve yapıyorsa, 100 çok fazladır. Günün çoğu için 100'de kalırsa, 200'e kadar çarpın ve ne olduğunu görün.
Sen olabilir aslında kendisi kullanımını izlemek ve onu başlar ama muhtemelen overkill sonraki sefer için yapılandırmayı ayarlamak için kodu var.
Açıklama ve detaylandırma için:
Kendi iş parçacığı havuzu alt sisteminizi haddeleme savunmuyorum, elbette sahip olduğunuz birini kullanın. Ancak, iş parçacıkları için iyi bir kesme noktası hakkında soruyorduğunuzdan, iş parçacığı havuzu uygulamanızın oluşturulan maksimum iş parçacığı sayısını (bu iyi bir şey) sınırlama yeteneğine sahip olduğunu varsayıyorum.
Ben iş parçacığı ve veritabanı bağlantısı havuz kodu yazdım ve (performans için gerekli olduğuna inanıyorum) aşağıdaki özelliklere sahip:
- minimum sayıda aktif iş parçacığı.
- maksimum iplik sayısı.
- bir süredir kullanılmayan dişleri kapatmak.
Birincisi, iş parçacığı havuzu istemcisi açısından minimum performans için bir taban çizgisi belirler (bu iş parçacığı sayısı her zaman kullanılabilir). İkincisi, aktif iş parçacıkları tarafından kaynak kullanımına bir kısıtlama getirir. Üçüncüsü, kaynak kullanımını en aza indirgemek için sessiz zamanlarda taban çizgisine geri döner.
Kullanılmayan iş parçacıklarına (A) sahip olmanın kaynak kullanımını, işi yapmak için yeterli iş parçacığına sahip olmamakla (B) kaynak kullanımını dengelemeniz gerekir.
(A) genellikle bellek kullanımıdır (yığınlar vb.) Çünkü iş yapmayan bir iş parçacığı CPU'nun çoğunu kullanmayacaktır. (B) genellikle bir iş parçacığının kullanılabilir olmasını beklemeniz gerektiğinden, isteklerin işlenmesinde gecikme olacaktır.
Bu yüzden ölçüyorsun. Belirttiğiniz gibi, iş parçacıklarınızın büyük çoğunluğu veritabanından yanıt bekler, böylece çalışmazlar. Kaç tane iş parçacığına izin vermeniz gerektiğini etkileyen iki faktör vardır.
Birincisi, kullanılabilir DB bağlantısı sayısıdır. DBMS'de artıramadığınız sürece bu zor bir sınır olabilir - DBMS'nizin bu durumda sınırsız sayıda bağlantı alabileceğini varsayacağım (ideal olarak bunu da ölçmelisiniz).
Daha sonra, sahip olmanız gereken iş parçacığı sayısı, tarihsel kullanımınıza bağlıdır. Çalıştırmanız gereken minimum sayı, mutlak minimum (örneğin, ve A gibi yapılandırılabilir hale getirin) ile şimdiye kadar çalıştırdığınız minimum + A% sayısıdır.
Maksimum iş parçacığı sayısı geçmiş maksimum +% B olmalıdır.
Ayrıca davranış değişikliklerini izliyor olmalısınız. Herhangi bir nedenle, kullanımınız önemli bir süre için kullanılabilir olanın% 100'üne giderse (böylece müşterilerin performansını etkileyecektir), bir kez daha% B daha yüksek olana kadar izin verilen maksimum değeri artırmalısınız.
"Tam olarak neyi ölçmeliyim?" soru:
Özel olarak ölçmeniz gereken şey, yük altında eşzamanlı kullanımdaki maksimum iş parçacığı miktarıdır (örneğin, DB çağrısından geri dönüşü beklemek). Daha sonra, örneğin % 10'luk bir güvenlik faktörü ekleyin (diğer posterler örneklerimi sabit öneriler olarak alıyor gibi göründüğünden).
Ayrıca, bu ayar için üretim ortamında yapılmalıdır. Önceden bir tahmin almak tamamdır, ancak hangi üretimin yolunuza çıkacağını asla bilemezsiniz (bu yüzden tüm bu şeyler çalışma zamanında yapılandırılabilir olmalıdır). Bu, gelen müşteri çağrılarının beklenmedik iki katına çıkması gibi bir durumu yakalamaktır.