Futásidejű konfigurációs beállítások szemétgyűjtéshez
Ez a lap a .NET-futtatókörnyezeti szemétgyűjtő (GC) beállításaival kapcsolatos információkat tartalmaz. Ha egy futó alkalmazás csúcsteljesítményét szeretné elérni, fontolja meg ezeket a beállításokat. Az alapértelmezett értékek azonban optimális teljesítményt biztosítanak a legtöbb alkalmazás számára a tipikus helyzetekben.
Gépház csoportokba vannak rendezve ezen a lapon. Az egyes csoportokon belüli beállításokat gyakran használják egymással együtt egy adott eredmény eléréséhez.
Megjegyzés:
- Ezeket a konfigurációkat csak a futtatókörnyezet olvassa be, amikor a csoportházirend-objektum inicializálva van (ez általában a folyamat indítási ideje alatt jelent). Ha módosít egy környezeti változót, amikor egy folyamat már fut, a változás nem jelenik meg ebben a folyamatban. Gépház, amelyek futásidőben módosíthatók API-kkal( például késési szinttel) nem jelennek meg ezen a lapon.
- Mivel a GC folyamatonkénti, ritkán van értelme ezeket a konfigurációkat gépszinten beállítani. Például nem szeretné, hogy egy gépen minden .NET-folyamat kiszolgálói GC-t vagy ugyanazt a korlátot használja.
- Számértékek esetén használjon decimális jelölést a runtimeconfig.json vagy a runtimeconfig.template.json fájl beállításaihoz, és hexadecimális jelölést a környezeti változó beállításaihoz. Hexadecimális értékek esetén megadhatja őket a "0x" előtaggal vagy anélkül.
- Ha a környezeti változókat használja, a .NET 6-os és újabb verziói ahelyett, hogy az előtagon
DOTNET_
szabványosítanákCOMPlus_
. AzCOMPlus_
előtag azonban továbbra is működni fog. Ha a .NET-futtatókörnyezet egy korábbi verzióját használja, akkor is használja példáulCOMPlus_gcServer
azCOMPlus_
előtagot.
A konfiguráció megadásának módjai
A .NET-futtatókörnyezet különböző verzióiban különböző módokon adhatók meg a konfigurációs értékek. Az alábbi táblázat egy összegzést tartalmaz.
Konfiguráció helye | .NET-verziók, amelyekre ez a hely vonatkozik | Formátumok | Hogyan értelmezik? |
---|---|---|---|
runtimeconfig.json fájl/runtimeconfig.template.json fájl | .NET (Core) | n | Az n decimális értékként van értelmezve. |
Környezeti változó | .NET-keretrendszer, .NET (Core) | 0xn vagy n | az n mindkét formátumban hexa értékként van értelmezve |
app.config fájl | .NET Framework | 0xn | n hatszögértékkéntvan értelmezve 1 |
1 Megadhat egy értéket az 0x
app.config fájlbeállítás előtagja nélkül, de ez nem ajánlott. A .NET-keretrendszer 4.8+-on hiba miatt az 0x
előtag nélkül megadott érték hexadecimálisként van értelmezve, de a .NET-keretrendszer korábbi verzióiban tizedes törtként értelmezik. A konfiguráció módosításának elkerülése érdekében használja az 0x
előtagot az app.config fájlban lévő érték megadásakor.
Ha például egy A.exe nevű .NET-keretrendszer-alkalmazáshoz GCHeapCount
12 halomot szeretne megadni, adja hozzá a következő XML-t az A.exe.config fájlhoz.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<runtime>
<gcServer enabled="true"/>
<GCHeapCount>0xc</GCHeapCount>
</runtime>
</configuration>
A .NET (Core) és a .NET-keretrendszer egyaránt használhat környezeti változókat.
Windows rendszeren .NET 6-os vagy újabb verzióval:
SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c
Windows rendszeren a .NET 5-ös vagy korábbi verziójával:
SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c
Egyéb operációs rendszereken:
.NET 6-os vagy újabb verziók esetén:
export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c
.NET 5 és korábbi verziók esetén:
export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c
Ha nem .NET-keretrendszer használ, a runtimeconfig.json vagy a runtimeconfig.template.json fájlban is beállíthatja az értéket.
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
A szemétgyűjtés ízei
A szemétgyűjtés két fő íze a munkaállomás GC és a kiszolgálói GC. A kettő közötti különbségekről további információt a Munkaállomás és a kiszolgáló szemétgyűjtése című témakörben talál.
A szemétgyűjtés almappái háttérbeliek és nem egyidejűek.
A szemétgyűjtés ízeinek kiválasztásához használja az alábbi beállításokat:
Munkaállomás és kiszolgáló
- Konfigurálja, hogy az alkalmazás munkaállomás szemétgyűjtést vagy kiszolgálói szemétgyűjtést használ-e.
- Alapértelmezett: Munkaállomás szemétgyűjtése. Ez egyenértékű az érték
false
beállításával.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.Server |
false -Munkaállomástrue -Szerver |
.NET Core 1.0 |
MSBuild tulajdonság | ServerGarbageCollection |
false -Munkaállomástrue -Szerver |
.NET Core 1.0 |
Környezeti változó | COMPlus_gcServer |
0 -Munkaállomás1 -Szerver |
.NET Core 1.0 |
Környezeti változó | DOTNET_gcServer |
0 -Munkaállomás1 -Szerver |
.NET 6 |
app.config for .NET-keretrendszer | GCServer | false -Munkaállomástrue -Szerver |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.Server": true
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
</Project>
Háttérbeli GC
- Konfigurálja, hogy engedélyezve van-e a háttérbeli (egyidejű) szemétgyűjtés.
- Alapértelmezett: Háttérbeli csoportházirend-objektum használata. Ez egyenértékű az érték
true
beállításával. - További információ: Háttér szemétgyűjtés.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.Concurrent |
true - háttérbeli GCfalse - nem egyidejű GC |
.NET Core 1.0 |
MSBuild tulajdonság | ConcurrentGarbageCollection |
true - háttérbeli GCfalse - nem egyidejű GC |
.NET Core 1.0 |
Környezeti változó | COMPlus_gcConcurrent |
1 - háttérbeli GC0 - nem egyidejű GC |
.NET Core 1.0 |
Környezeti változó | DOTNET_gcConcurrent |
1 - háttérbeli GC0 - nem egyidejű GC |
.NET 6 |
app.config for .NET-keretrendszer | gcConcurrent | true - háttérbeli GCfalse - nem egyidejű GC |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Concurrent": false
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.Concurrent": false
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
</Project>
Erőforrás-használat kezelése
A szemétgyűjtő memóriájának és processzorhasználatának kezeléséhez használja az alábbi beállításokat:
- Affinitás
- Maszk affinitása
- Tartományok affinitása
- CPU-csoportok
- Halom száma
- Halomkorlát
- Halomkorlát százalékos aránya
- Magas memóriaszázalék
- Objektumonkénti halomkorlátok
- Objektumonkénti halomkorlát százalékos száma
- Virtuális gép megőrzése
Ezen beállítások némelyikével kapcsolatos további információkért lásd a munkaállomás és a kiszolgáló GC közötti középső terepet ismertető blogbejegyzést.
Halom száma
- Korlátozza a szemétgyűjtő által létrehozott halmok számát.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- Ha a GC processzor affinitása engedélyezve van, ami az alapértelmezett érték, a halomszám beállítás affinitja
n
a GC-halomokat/szálakat az elsőn
processzorokhoz. (Az affinitás maszkjánakvagy a tartományok affinitási beállításainak használatával pontosan megadhatja, hogy mely processzorokat szeretné affinitni.) - Ha a GC processzor affinitása le van tiltva, ez a beállítás korlátozza a GC-halmok számát.
- További információkért lásd a GCHeapCount megjegyzéseit.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapCount |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapCount |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapCount |
hexadecimális érték | .NET 6 |
app.config for .NET-keretrendszer | GCHeapCount | decimális érték | .NET-keretrendszer 4.6.2 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapCount": 16
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapCount": 16
}
}
Tipp.
Ha a runtimeconfig.json fájlban állítja be a beállítást, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a halmok számát 16-ra szeretné korlátozni, akkor a JSON-fájl értéke 16, a környezeti változó esetében pedig 0x10 vagy 10.
Maszk affinitása
- Megadja, hogy a szemétgyűjtő szálak pontosan mely processzorokat használják.
- Ha a GC processzor affinitása le van tiltva, a rendszer figyelmen kívül hagyja ezt a beállítást.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- Az érték egy bitmaszk, amely meghatározza a folyamat számára elérhető processzorokat. Például egy 1023-ás decimális érték (vagy a 0x3FF hexadecimális értéke vagy 3FF, ha a környezeti változót használja) 0011 1111 1111 bináris jelölésben. Ez azt határozza meg, hogy az első 10 processzort kell használni. A következő 10 processzor, azaz a 10–19. processzorok megadásához adja meg a 1047552 (vagy 0xFFC00 vagy FFC00 hexadecimális értéke) decimális értékét, amely egyenértékű az 1111 1111 1111 1100 000 0000 bináris értékkel.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapAffinitizeMask |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapAffinitizeMask |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapAffinitizeMask |
hexadecimális érték | .NET 6 |
app.config for .NET-keretrendszer | GCHeapAffinitizeMask | decimális érték | .NET-keretrendszer 4.6.2 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
Tartományok affinitása
- Megadja a szemétgyűjtő szálakhoz használandó processzorok listáját.
- Ez a beállítás hasonló a System.GC.HeapAffinitizeMaskhoz, de több mint 64 processzor megadását teszi lehetővé.
- Windows operációs rendszerek esetén előtagként adja meg a processzor számát vagy tartományát a megfelelő processzorcsoporttal, például: "0:1-10,0:12,1:50-52,1:7". Ha valójában nem rendelkezik 1-nél több CPU-csoportval, ezt a beállítást nem használhatja. Az Affinitás maszk beállítását kell használnia. A megadott számok pedig ebben a csoportban vannak, ami azt jelenti, hogy nem lehet >= 64.
- Linux operációs rendszerek esetén, ahol a CPU-csoport fogalma nem létezik, ezt a beállítást és az affinitás maszk beállítását is használhatja ugyanazon tartományok megadásához. A "0:1-10" helyett pedig adja meg az "1-10" értéket, mert nem kell csoportindexet megadnia.
- Ha a GC processzor affinitása le van tiltva, a rendszer figyelmen kívül hagyja ezt a beállítást.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- További információt a Maoni Stephens blogján, a 64 CPU-val rendelkező > gépek processzorkonfigurációjának javítása a GC-ben című témakörben talál.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapAffinitizeRanges |
Vesszővel tagolt processzorszámok vagy processzorszámtartományok listája. Unix példa: "1-10,12,50-52,70" Windows-példa: "0:1-10,0:12,1:50-52,1:7" |
.NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapAffinitizeRanges |
Vesszővel tagolt processzorszámok vagy processzorszámtartományok listája. Unix példa: "1-10,12,50-52,70" Windows-példa: "0:1-10,0:12,1:50-52,1:7" |
.NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapAffinitizeRanges |
Vesszővel tagolt processzorszámok vagy processzorszámtartományok listája. Unix példa: "1-10,12,50-52,70" Windows-példa: "0:1-10,0:12,1:50-52,1:7" |
.NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
CPU-csoportok
Konfigurálja, hogy a szemétgyűjtő processzorcsoportokat használ-e vagy sem.
Ha egy 64 bites Windows-számítógép több processzorcsoportot is használ, azaz több mint 64 processzort használ, az elem engedélyezésével az összes CPU-csoportra kiterjed a szemétgyűjtés. A szemétgyűjtő minden magot használ a halom halom létrehozásához és kiegyensúlyozásához.
Megjegyzés:
Ez egy csak Windows-alapú fogalom. A régebbi Windows-verziókban a Windows csak egy processzorcsoportra korlátozta a folyamatot. Így a GC csak egy processzorcsoportot használt, kivéve, ha ezt a beállítást több CPU-csoport engedélyezéséhez használta. Ez az operációsrendszer-korlátozás a Windows 11-ben és a Server 2022-ben megszűnt. A .NET 7-től kezdődően a GC alapértelmezés szerint az összes CPU-csoportot használja Windows 11 vagy Server 2022 rendszeren való futtatáskor.
Csak a 64 bites Windows operációs rendszerek kiszolgálói szemétgyűjtésére vonatkozik.
Alapértelmezett: A GC nem terjed ki a processzorcsoportokra. Ez egyenértékű az érték
0
beállításával.További információt a Maoni Stephens blogján, a 64 CPU-val rendelkező > gépek processzorkonfigurációjának javítása a GC-ben című témakörben talál.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.CpuGroup |
false -Tiltvatrue -Engedélyezve |
.NET 5 |
Környezeti változó | COMPlus_GCCpuGroup |
0 -Tiltva1 -Engedélyezve |
.NET Core 1.0 |
Környezeti változó | DOTNET_GCCpuGroup |
0 -Tiltva1 -Engedélyezve |
.NET 6 |
app.config for .NET-keretrendszer | GCCpuGroup | false -Tiltvatrue -Engedélyezve |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Megjegyzés:
Ha a közös nyelvi futtatókörnyezetet (CLR) úgy szeretné konfigurálni, hogy a szálkészletből származó szálakat is eloszthassa az összes CPU-csoport között, engedélyezze a Thread_UseAllCpuGroups elem beállítását. A .NET Core-alkalmazások esetében ezt a beállítást a környezeti változó 1
értékének DOTNET_Thread_UseAllCpuGroups
beállításával engedélyezheti.
Affinitás
- Meghatározza, hogy a szemétgyűjtési szálakat a processzorokkal kell-e affinitani . A GC-szál affinitása azt jelenti, hogy csak az adott cpu-n futtatható. Minden GC-szálhoz létrejön egy halom.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- Alapértelmezett: A szemétgyűjtési szálak affinitása processzorokkal. Ez egyenértékű az érték
false
beállításával.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.NoAffinitize |
false - affinitástrue - nem affinitás |
.NET Core 3.0 |
Környezeti változó | COMPlus_GCNoAffinitize |
0 - affinitás1 - nem affinitás |
.NET Core 3.0 |
Környezeti változó | DOTNET_GCNoAffinitize |
0 - affinitás1 - nem affinitás |
.NET 6 |
app.config for .NET-keretrendszer | GCNoAffinitize | false - affinitástrue - nem affinitás |
.NET-keretrendszer 4.6.2 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.NoAffinitize": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.NoAffinitize": true
}
}
Halomkorlát
A maximális véglegesítési méretet adja meg bájtban a GC-halom és a GC-könyvelés esetében.
Ez a beállítás csak a 64 bites számítógépekre vonatkozik.
Ez a beállítás figyelmen kívül lesz hagyva, ha az objektumonkénti halomkorlátok vannak konfigurálva.
Az alapértelmezett érték, amely csak bizonyos esetekben érvényes, a tároló memóriakorlátjának 20 MB-os vagy 75%-os nagyobb értéke. Az alapértelmezett érték akkor érvényes, ha:
- A folyamat egy megadott memóriakorlátot tartalmazó tárolóban fut.
- A System.GC.HeapHardLimitPercent nincs beállítva.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimit |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapHardLimit |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapHardLimit |
hexadecimális érték | .NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
Tipp.
Ha a runtimeconfig.json fájlban állítja be a beállítást, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például 200 mebájt (MiB) korlátot szeretne megadni, az értékek a JSON-fájlhoz 209715200, a környezeti változóhoz pedig 0xC800000 vagy C800000.
Halomkorlát százalékos aránya
A teljes fizikai memória százalékos arányában adja meg a megengedett GC-halomhasználatot.
Ha a System.GC.HeapHardLimit is be van állítva, a rendszer figyelmen kívül hagyja ezt a beállítást.
Ez a beállítás csak a 64 bites számítógépekre vonatkozik.
Ha a folyamat egy megadott memóriakorláttal rendelkező tárolóban fut, a rendszer ennek a memóriakorlátnak a százalékában számítja ki a százalékos értéket.
Ez a beállítás figyelmen kívül lesz hagyva, ha az objektumonkénti halomkorlátok vannak konfigurálva.
Az alapértelmezett érték, amely csak bizonyos esetekben érvényes, a tároló memóriakorlátjának 20 MB-os vagy 75%-os nagyobb értéke. Az alapértelmezett érték akkor érvényes, ha:
- A folyamat egy megadott memóriakorlátot tartalmazó tárolóban fut.
- A System.GC.HeapHardLimit nincs beállítva.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPercent |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapHardLimitPercent |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapHardLimitPercent |
hexadecimális érték | .NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
Tipp.
Ha a runtimeconfig.json fájlban állítja be a beállítást, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a halomhasználatot 30%-ra szeretné korlátozni, akkor a JSON-fájl értéke 30, a környezeti változó esetében pedig 0x1E vagy 1E.
Objektumonkénti halomkorlátok
A GC engedélyezett halomhasználatát objektumonként határozhatja meg. A különböző halom a nagy objektum halom (LOH), a kis objektum halom (SOH) és a rögzített objektum halom (POH).
- Ha a , vagy a
DOTNET_GCHeapHardLimitSOH
beállítások bármelyikéhez értéket ad meg, meg kell adnia egy értéket is a következőhözDOTNET_GCHeapHardLimitSOH
: ésDOTNET_GCHeapHardLimitLOH
.DOTNET_GCHeapHardLimitPOH
DOTNET_GCHeapHardLimitLOH
Ha nem, a futtatókörnyezet inicializálása sikertelen lesz. - Az alapértelmezett érték a
DOTNET_GCHeapHardLimitPOH
0.DOTNET_GCHeapHardLimitSOH
ésDOTNET_GCHeapHardLimitLOH
nem rendelkeznek alapértelmezett értékekkel.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitSOH |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitSOH |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitSOH |
hexadecimális érték | .NET 6 |
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitLOH |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitLOH |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitLOH |
hexadecimális érték | .NET 6 |
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPOH |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitPOH |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitPOH |
hexadecimális érték | .NET 6 |
Ezek a konfigurációs beállítások nem rendelkeznek meghatározott MSBuild tulajdonságokkal. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Tipp.
Ha a runtimeconfig.json fájlban állítja be a beállítást, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például 200 mebájt (MiB) korlátot szeretne megadni, az értékek a JSON-fájlhoz 209715200, a környezeti változóhoz pedig 0xC800000 vagy C800000.
Objektumonkénti halomkorlát százalékos száma
A GC engedélyezett halomhasználatát objektumonként határozhatja meg. A különböző halom a nagy objektum halom (LOH), a kis objektum halom (SOH) és a rögzített objektum halom (POH).
- Ha a , vagy a
DOTNET_GCHeapHardLimitSOHPercent
beállítások bármelyikéhez értéket ad meg, meg kell adnia egy értéket is a következőhözDOTNET_GCHeapHardLimitSOHPercent
: ésDOTNET_GCHeapHardLimitLOHPercent
.DOTNET_GCHeapHardLimitPOHPercent
DOTNET_GCHeapHardLimitLOHPercent
Ha nem, a futtatókörnyezet inicializálása sikertelen lesz. - Ezek a beállítások figyelmen kívül lesznek hagyva, ha
DOTNET_GCHeapHardLimitSOH
,DOTNET_GCHeapHardLimitLOH
ésDOTNET_GCHeapHardLimitPOH
meg vannak adva. - Az 1 érték azt jelenti, hogy a GC a teljes fizikai memória 1%-át használja az objektum halomához.
- Minden értéknek nullánál nagyobbnak és 100-nál kisebbnek kell lennie. Emellett a három százalékérték összegének 100-nál kisebbnek kell lennie. Ellenkező esetben a futtatókörnyezet inicializálása sikertelen lesz.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitSOHPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitSOHPercent |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitSOHPercent |
hexadecimális érték | .NET 6 |
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitLOHPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitLOHPercent |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitLOHPercent |
hexadecimális érték | .NET 6 |
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPOHPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitPOHPercent |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitPOHPercent |
hexadecimális érték | .NET 6 |
Ezek a konfigurációs beállítások nem rendelkeznek meghatározott MSBuild tulajdonságokkal. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Tipp.
Ha a runtimeconfig.json fájlban állítja be a beállítást, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a halomhasználatot 30%-ra szeretné korlátozni, akkor a JSON-fájl értéke 30, a környezeti változó esetében pedig 0x1E vagy 1E.
Magas memóriaszázalék
A memóriaterhelést a használatban lévő fizikai memória százalékos aránya jelzi. Alapértelmezés szerint, amikor a fizikai memória terhelése eléri a 90%-ot, a szemétgyűjtés agresszívebbé válik a teljes, tömörített szemétgyűjtemények miatt a lapozás elkerülése érdekében. Ha a memóriaterhelés 90% alatt van, a GC a teljes szemétgyűjtés háttérgyűjteményeit részesíti előnyben, amelyek rövidebb szünetekkel rendelkeznek, de nem csökkentik a halom teljes méretét. A jelentős mennyiségű memóriával rendelkező gépeken (80 GB vagy több) az alapértelmezett terhelési küszöbérték 90% és 97% között van.
A magas memóriaterhelési küszöbértéket a környezeti változó vagy System.GC.HighMemoryPercent
a DOTNET_GCHighMemPercent
JSON-konfigurációs beállítás módosíthatja. Érdemes lehet módosítani a küszöbértéket, ha szabályozni szeretné a halomméretet. Például a 64 GB memóriával rendelkező gépek domináns folyamata esetén ésszerű, ha a GC reagálni kezd, amikor a memória 10%-a elérhető. Kisebb folyamatok esetén azonban, például egy olyan folyamat esetében, amely csak 1 GB memóriát használ fel, a GC kényelmesen futtatható a rendelkezésre álló memória kevesebb mint 10%-ával. Ezekben a kisebb folyamatokban érdemes magasabbra állítani a küszöbértéket. Másrészt, ha azt szeretné, hogy a nagyobb folyamatok kisebb halommérettel rendelkezzenek (még akkor is, ha rengeteg fizikai memória áll rendelkezésre), a küszöbérték csökkentése hatékony módja annak, hogy a GC hamarabb reagáljon a halom le tömörítéséhez.
Megjegyzés:
A tárolóban futó folyamatok esetében a GC a tárolókorlát alapján veszi figyelembe a fizikai memóriát.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HighMemoryPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHighMemPercent |
hexadecimális érték | .NET Core 3.0 .NET-keretrendszer 4.7.2 |
Környezeti változó | DOTNET_GCHighMemPercent |
hexadecimális érték | .NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Tipp.
Ha a runtimeconfig.json fájlban állítja be a beállítást, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a magas memóriaküszöböt 75%-ra szeretné állítani, az értékek a JSON-fájl esetében 75, a környezeti változó esetében pedig 0x4B vagy 4B.
Virtuális gép megőrzése
- Konfigurálja, hogy a törölni kívánt szegmensek felkerülnek-e egy készenléti listára későbbi használatra, vagy visszakerülnek-e az operációs rendszerbe (OS).
- Alapértelmezett: Szegmensek visszaengedése az operációs rendszerbe. Ez egyenértékű az érték
false
beállításával.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.RetainVM |
false - operációs rendszerre való kiadástrue - készenléti állapotba helyezése |
.NET Core 1.0 |
MSBuild tulajdonság | RetainVMGarbageCollection |
false - operációs rendszerre való kiadástrue - készenléti állapotba helyezése |
.NET Core 1.0 |
Környezeti változó | COMPlus_GCRetainVM |
0 - operációs rendszerre való kiadás1 - készenléti állapotba helyezése |
.NET Core 1.0 |
Környezeti változó | DOTNET_GCRetainVM |
0 - operációs rendszerre való kiadás1 - készenléti állapotba helyezése |
.NET 6 |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.RetainVM": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.RetainVM": true
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>
</Project>
Nagyméretű lapok
- Megadja, hogy nagy oldalakat kell-e használni a halom kemény korlátjának beállításakor.
- Alapértelmezett: Ne használjon nagy oldalakat, ha a halom kemény korlátja be van állítva. Ez egyenértékű az érték
0
beállításával. - Ez egy kísérleti beállítás.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | N.A. | N/A | N.A. |
Környezeti változó | COMPlus_GCLargePages |
0 -Tiltva1 -Engedélyezve |
.NET Core 3.0 |
Környezeti változó | DOTNET_GCLargePages |
0 -Tiltva1 -Engedélyezve |
.NET 6 |
Nagyméretű objektumok engedélyezése
- 64 bites platformokon konfigurálja a szemétgyűjtő támogatását a 2 gigabájtnál (GB) nagyobb tömbökhöz.
- Alapértelmezett: A GC a 2 GB-nál nagyobb tömböket támogatja. Ez egyenértékű az érték
1
beállításával. - Ez a lehetőség elavulttá válhat a .NET egy későbbi verziójában.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | N.A. | N/A | N.A. |
Környezeti változó | COMPlus_gcAllowVeryLargeObjects |
1 -Engedélyezve0 -Tiltva |
.NET Core 1.0 |
Környezeti változó | DOTNET_gcAllowVeryLargeObjects |
1 -Engedélyezve0 -Tiltva |
.NET 6 |
app.config for .NET-keretrendszer | gcAllowVeryLargeObjects | 1 -Engedélyezve0 -Tiltva |
.NET-keretrendszer 4.5 |
Nagy objektum halomküszöbe
- Bájtban adja meg a küszöbértéket, amely miatt az objektumok a nagy méretű objektum halomra (LOH) kerülnek.
- Az alapértelmezett küszöbérték 85 000 bájt.
- A megadott értéknek nagyobbnak kell lennie az alapértelmezett küszöbértéknél.
- Előfordulhat, hogy a futtatókörnyezet az aktuális konfiguráció maximális méretére leképezi az értéket. Az API-n keresztül futtatáskor megvizsgálhatja a GC.GetConfigurationVariables() használatban lévő értéket.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.LOHThreshold |
decimális érték | .NET Core 1.0 |
Környezeti változó | COMPlus_GCLOHThreshold |
hexadecimális érték | .NET Core 1.0 |
Környezeti változó | DOTNET_GCLOHThreshold |
hexadecimális érték | .NET 6 |
app.config for .NET-keretrendszer | GCLOHThreshold | decimális érték | .NET-keretrendszer 4.8 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
Tipp.
Ha a runtimeconfig.json fájlban állítja be a beállítást, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például 120 000 bájtos küszöbértéket szeretne beállítani, akkor a JSON-fájl értéke 120000, a környezeti változó esetében pedig 0x1D4C0 vagy 1D4C0.
Önálló GC
- Megadja annak a Natív GC-kódtárnak a nevét, amelyet a futtatókörnyezet betölt az alapértelmezett GC-implementáció helyett. Ennek a natív kódtárnak ugyanabban a könyvtárban kell lennie, mint a .NET-futtatókörnyezetnek (coreclr.dll Windows rendszeren, libcoreclr.so Linuxon).
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | N.A. | N/A | N.A. |
Környezeti változó | COMPlus_GCName |
string_path | .NET Core 2.0 |
Környezeti változó | DOTNET_GCName |
string_path | .NET 6 |
Memória megőrzése
- Úgy konfigurálja a szemétgyűjtőt, hogy a gyakoribb szemétgyűjtések és esetleg hosszabb szünetidők rovására takarékoskodjon a memóriával.
- Az alapértelmezett érték 0 – ez nem jelent változást.
- Az alapértelmezett 0 érték mellett az 1 és 9 közötti értékek (beleértve a elemet is) érvényesek. Minél magasabb az érték, annál inkább a szemétgyűjtő megpróbálja megőrizni a memóriát, és így a halom kicsi.
- Ha az érték nem nulla, a nagy méretű objektum halom automatikusan tömörítve lesz, ha túl nagy a töredezettsége.
A beállítás neve | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.ConserveMemory |
0 - 9 |
.NET 6 |
Környezeti változó | COMPlus_GCConserveMemory |
0 -9 |
.NET-keretrendszer 4.8 |
Környezeti változó | DOTNET_GCConserveMemory |
0 -9 |
.NET 6 |
app.config for .NET-keretrendszer | GCConserveMemory | 0 -9 |
.NET-keretrendszer 4.8 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Használja a runtimeconfig.json beállításnevet az Include
attribútum értékeként. Példa: MSBuild properties.
Példa app.config fájlra:
<configuration>
<runtime>
<GCConserveMemory enabled="5"/>
</runtime>
</configuration>
Tipp.
Kísérletezzen különböző számokkal, hogy lássa, melyik érték működik a legjobban. Kezdje 5 és 7 közötti értékkel.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: