ydeevne - Hvor mange Windows håndtag i brug er 'for mange'?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forstår, at svaret på dette spørgsmål kan afhænge af registreringsdatabaseindstillinger og på versionen af ​​Windows, og måske på mængden af ​​RAM, hvis der ikke er nok hukommelse. Af hensyn til dette spørgsmål antager, at serveren har masser af RAM (3 + GiB).


Hvis en ansøgning (3. parts ansøgning i dette tilfælde) lækager håndteres om et par hundrede timer, hvor mange samlede håndtag kan applikationen lække før andre applikationer løber ind i problemer? Ved 'problemer' mener jeg, for eksempel, at du ikke starter en tråd, undlader at åbne en fil osv.


Jeg har set nogle servere (let indlæst) kører fint med en proces (som regel en databaseproces) ved hjælp af et par titusindvis af håndtag, så den gamle 10000 håndtagsgrænse er helt klart ikke problemet her. (Og det var en per -procesgrænse alligevel, så det ville ikke påvirke min ansøgning, hvilket er godt under dette punkt.)


Kan nogen enten besvare spørgsmålet eller pege på nogle ressourcer, der forklarer, hvor mange samlede håndtag en Windows-server vil tillade, før du effektivt løber ud (af håndtag eller andre systemressourcer)?

Bedste reference


Se Raymond Chens indlæg om dette emne. Vindueslederen håndhæver en grænse på 10K pr. Proces og har en samlet grænse på 32K på tværs af systemet. Så hvis det kun 'lækker' 100 håndtag pr. Time, så har du få dage af opetid, før det begynder at mislykkes. [4]


Bemærk at ikke alle håndtag er ens. Vindueshåndtag er f.eks. Ikke DB-håndtag og kan følge forskellige regler. Så denne begrænsning kan muligvis ikke finde anvendelse, afhængigt af hvilken slags håndtag programmet lækker. Læs også dette blogindlæg. [5]

Andre referencer 1


Desktop-bunken, som er en hukommelsesham, hvor de rigtige 'ting' håndtaget repræsenterer liv. Det er nogle gange ikke så meget, hvor mange håndtag du har tildelt, men hvor meget hukommelse hver objekt under det håndtag bruger. Du kan fejle bunden på denne måde. smerte at installere. [6] [7] [8]


(dette blev genbrugt fra et andet af mine svar)

Andre referencer 2


Da disse værdier kan ændre sig med nye Windows-versioner, kan du bruge værktøjet SysInternals TestLimit/TestLimit64 for at få et groft estimat. X64-versionen kan løbe et stykke tid, især for hukommelsestesten (det kan muligvis bruge harddisken (swap-fil) for at få mere virtuel hukommelse).


Få værktøjerne fra http://live.sysinternals.com/WindowsInternals/eller http://download.sysinternals.com/files/TestLimit.zip[9][10]


Kommandolinje indstillinger:


-p check process limit
-t check thread limit
-h check handle limit
-u check user handle limit

Andre referencer 3


Ifølge dette er 10000. [11]