2017-03-21 6 views
1

Derzeit haben wir Probleme mit einer Anwendung, die viele Anfragen an eine Redis-Instanz stellt, als den Application-Cache.Redis Wie finde ich den optimalen Wert für IOCP?

Wir haben alle Arten von Timeouts bei verschiedenen Operationen erhalten. Wie folgt aus:

System.TimeoutException: Timeout performing GET MyKey, inst: 2, mgr: Inactive, 
queue: 6, qu: 0, qs: 6, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, 
IOCP: (Busy=6,Free=994,Min=4,Max=1000), 
WORKER: (Busy=3,Free=997,Min=4,Max=1000) 

Nach Anhörung der Dokumentation, die wir im folgenden Artikel (https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Timeouts.md) empfehlen uns gefunden, die Anzahl der Worker zu erhöhen (Standardwert = 4)

Wie können wir finden die optimale Menge an min/max wohnthreads? Redis empfiehlt, mit 200-300 zu beginnen. Aber das scheint hoch, wenn wir mit dem Standardwert von 4 vergleichen.

Was könnten Probleme sein, die wir erfahren, wenn Sie die Zahl zu hoch setzen? Warum ist dieser Standardwert so niedrig wie 4?

Antwort

1

Beachten Sie, dass wenn Sie einen Wert mit ThreadPool.SetMinThreads (...) festlegen, bedeutet dies nicht, dass diese vielen Threads sofort gesponnen oder immer beibehalten werden. Es bedeutet nur, dass der Threadpool neue Worker-Threads oder E/A-Vervollständigungsthreads auf Anforderung (ohne Drosselung) bereitstellt, bis die Einstellung "Minimum" für jeden Thread-Typ erreicht ist.

Standardmäßig ist die Mindestanzahl von Threads auf die Anzahl der Prozessoren in einem System festgelegt.

Sie müssen es nicht auf 200-300 einstellen. Sie können es auf einen Wert (sagen Sie 100) erhöhen und es entsprechend anpassen, wie Sie müssen. Sie benötigen eine höhere Nummer im Falle von stoßartigen Belastungen.

Verwandte Themen