Niektórzy powiedzieliby, że dwa wątki to za dużo - nie jestem w tym obozie :-)
Oto moja rada: zmierz, nie zgaduj. Jedną z sugestii jest skonfigurowanie go i ustawienie początkowo na 100, a następnie wypuszczenie oprogramowania na wolność i monitorowanie tego, co się stanie.
Jeśli użycie wątku osiąga wartość szczytową 3, to 100 to za dużo. Jeśli pozostanie na poziomie 100 przez większą część dnia, podnieś go do 200 i zobacz, co się stanie.
Państwo mogłoby rzeczywiście mają swój kod sama monitorowania użycia i dostosować konfigurację do następnej chwili jej rozpoczęcia, ale to chyba przesada.
W celu wyjaśnienia i opracowania:
Nie opowiadam się za stworzeniem własnego podsystemu pulowania wątków, za wszelką cenę użyj tego, który masz. Ale ponieważ pytałeś o dobry punkt odcięcia dla wątków, zakładam, że twoja implementacja puli wątków ma możliwość ograniczenia maksymalnej liczby utworzonych wątków (co jest dobrą rzeczą).
Napisałem kod puli połączeń wątków i baz danych i mają one następujące funkcje (które moim zdaniem są niezbędne dla wydajności):
- minimalna liczba aktywnych wątków.
- maksymalna liczba wątków.
- zamykanie wątków, które nie były używane przez jakiś czas.
Pierwszy określa punkt odniesienia dla minimalnej wydajności pod względem klienta puli wątków (ta liczba wątków jest zawsze dostępna do użycia). Drugi określa ograniczenie wykorzystania zasobów przez aktywne wątki. Trzeci powraca do linii podstawowej w spokojnych czasach, aby zminimalizować zużycie zasobów.
Musisz zrównoważyć zużycie zasobów wynikające z nieużywanych wątków (A) z zużyciem zasobów, ponieważ nie ma wystarczającej liczby wątków do wykonania pracy (B).
(A) to ogólnie użycie pamięci (stosy i tak dalej), ponieważ wątek niedziałający nie będzie zużywał dużo procesora. (B) zazwyczaj opóźnia przetwarzanie żądań, gdy przychodzą, ponieważ musisz poczekać, aż wątek stanie się dostępny.
Właśnie dlatego mierzysz. Jak twierdzisz, ogromna większość twoich wątków będzie czekała na odpowiedź z bazy danych, więc nie będą działać. Istnieją dwa czynniki, które wpływają na liczbę wątków, na które powinieneś zezwolić.
Pierwszy to liczba dostępnych połączeń DB. Może to być twardy limit, chyba że możesz go zwiększyć w DBMS - Zakładam, że twój DBMS może w tym przypadku przyjmować nieograniczoną liczbę połączeń (chociaż najlepiej też to mierzysz).
Następnie liczba wątków, które powinieneś mieć, zależy od twojego historycznego wykorzystania. Minimum, które powinieneś mieć, to minimalna liczba, którą kiedykolwiek miałeś + A%, z absolutnym minimum (na przykład i skonfiguruj go tak jak A) 5.
Maksymalna liczba wątków powinna być historycznym maksimum + B%.
Powinieneś także monitorować zmiany zachowań. Jeśli z jakiegoś powodu twoje użycie osiągnie 100% dostępnego poziomu przez dłuższy czas (tak, aby wpłynęło to na wydajność klientów), powinieneś podnieść maksymalne dozwolone maksimum, aż znów będzie wyższe o B%.
W odpowiedzi na pytanie „co dokładnie powinienem zmierzyć?” pytanie:
To, co powinieneś dokładnie zmierzyć, to maksymalna liczba wątków jednocześnie używanych (np. Oczekujących na powrót z wywołania DB) pod obciążeniem. Następnie dodaj na przykład współczynnik bezpieczeństwa wynoszący 10% (podkreślono, ponieważ inne plakaty wydają się brać moje przykłady za stałe rekomendacje).
Ponadto należy to zrobić w środowisku produkcyjnym w celu dostrojenia. Wcześniej można uzyskać oszacowanie, ale nigdy nie wiadomo, jaka produkcja rzuci Ci drogę (dlatego wszystkie te rzeczy powinny być konfigurowalne w czasie wykonywania). Ma to na celu uchwycenie sytuacji, takiej jak nieoczekiwane podwojenie przychodzących połączeń klientów.