Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk áttekintést nyújt a Java-alkalmazások tárolóba helyezéséhez javasolt stratégiákról és beállításokról. Egy Java alkalmazás tárolóba helyezésekor gondosan gondolja át, hogy mennyi processzoridő áll rendelkezésre. Ezután fontolja meg, hogy mennyi memória áll rendelkezésre mind a teljes memóriamennyiség, mind a Java virtuális gép (JVM) halommérete szempontjából. Tárolóalapú környezetekben az alkalmazások hozzáférhetnek az összes processzorhoz, ezért több szálat is futtathatnak párhuzamosan. Gyakran előfordul azonban, hogy a tárolók olyan PROCESSZORkvótát alkalmaznak, amely szabályozhatja a CPU-khoz való hozzáférést.
A JVM heurisztika használatával határozza meg az "elérhető processzorok" számát a CPU-kvóta alapján, ami jelentősen befolyásolhatja Java alkalmazások teljesítményét. A tárolóhoz lefoglalt memória és a JVM halomterületének mérete ugyanolyan fontos, mint a processzorok. Ezek a tényezők határozzák meg a szemétgyűjtő (GC) viselkedését és a rendszer általános teljesítményét.
Új alkalmazás tárolóba helyezése
Ha egy új alkalmazás Java számítási feladatát tárolóba helyezi, két dolgot érdemes figyelembe vennie a memóriával kapcsolatban:
- A tárolóhoz lefoglalt memória.
- A Java-folyamat számára rendelkezésre álló memória mennyisége.
A JVM alapértelmezett ergonómiája
Az alkalmazásoknak kiindulópontra és beállításokra van szükségük. A JVM alapértelmezett ergonómiája előre meghatározott értékekkel rendelkezik, amelyek a rendelkezésre álló processzorok számán és a rendszerben lévő memória mennyiségén alapulnak. A JVM az alábbi táblázatokban szereplő alapértelmezett értékeket használja, amikor meghatározott indítási jelzők vagy paraméterek nélkül indítja el.
Az alábbi táblázat az elérhető erőforrásokhoz tartozó alapértelmezett GC-t mutatja:
| Elérhető erőforrások | Alapértelmezett szemétgyűjtés |
|---|---|
| Tetszőleges számú processzor Legfeljebb 1791 MB memória |
SerialGC |
| 2+ processzor 1792 MB vagy több memória |
G1GC |
Az alábbi táblázat az alapértelmezett maximális halomméretet mutatja attól függően, hogy mennyi memória áll rendelkezésre abban a környezetben, ahol a JVM fut:
| Rendelkezésre álló memória | Alapértelmezett maximális halomméret |
|---|---|
| Legfeljebb 256 MB | Rendelkezésre álló memória: 50% |
| 256 MB–512 MB | ~127 MB |
| Több mint 512 MB | 25% rendelkezésre álló memória |
Az alapértelmezett kezdeti halomméret a rendelkezésre álló memória 1/64-e. Ezek az értékek érvényesek az OpenJDK 11-hez és újabb verziókhoz – és a legtöbb disztribúcióhoz, például az OpenJDK Microsoft BuildjDK-hoz, az Azul Zuluhoz, az Eclipse Temurinhoz, az Oracle OpenJDK-hoz és más disztribúciókhoz.
Tárolómemória meghatározása
Válasszon egy tárolómemória-mennyiséget, amely az alkalmazás igényeitől és a jellegzetes használati mintáktól függően a legjobban szolgálja ki a számítási feladatot. Ha például az alkalmazás nagyméretű objektumgráfokat hoz létre, valószínűleg több memóriára van szüksége, mint amennyi sok kis objektumdiagrammal rendelkező alkalmazásokhoz szükséges.
Jótanács
Ha nem tudja, hogy mennyi memóriát kell lefoglalni, jó kiindulópont a 4 GB.
JVM-halommemória meghatározása
A JVM-halommemória lefoglalásakor ne feledje, hogy a JVM-nek több memóriára van szüksége, mint a JVM-halomhoz lefoglalt mennyiség. Ne állítsa a maximális JVM-halommemóriát a tárolómemória mennyiségének megfelelő értékre. Ez a beállítás a tároló memórián kívüli (OOM) hibáit és a tároló összeomlását okozhatja.
Jótanács
75% tárolómemória lefoglalása a JVM-halomhoz.
Az OpenJDK 11-es és újabb verzióiban állítsa be a JVM halomméretét az alábbi módok egyikén:
| Leírás | Zászló | Példák |
|---|---|---|
| Rögzített érték | -Xmx |
-Xmx4g |
| Dinamikus érték | -XX:MaxRAMPercentage |
-XX:MaxRAMPercentage=75 |
Minimális vagy kezdeti halomméret
Ha a környezet bizonyos mennyiségű memóriát biztosít egy JVM-példány számára, például egy tárolóban, állítsa a minimális halomméretet vagy a kezdeti halomméretet a maximális halommérettel megegyező méretre. Ez a beállítás azt jelzi a JVM-nek, hogy nem szabadítson fel memóriát az operációs rendszer számára.
A minimális halomméret beállításához használja -Xms az abszolút mennyiségeket vagy -XX:InitialRAMPercentage a százalékos mennyiségeket.
Fontos
Annak ellenére, hogy a név azt sugallja, a jelölő -XX:MinRAMPercentage beállítja az alapértelmezett maximális RAM-százalékot a rendszerben legfeljebb 256 MB RAM-mal rendelkező rendszerek esetében.
Meghatározni, melyik szemétgyűjtőt használjuk
Korábban meghatározta, hogy mennyi JVM-halommemória kezdődjön. A következő lépés a GC kiválasztása. A maximális JVM-halommemória mennyisége gyakran befolyásolja a GC kiválasztását. Az alábbi táblázat az egyes GC-k jellemzőit ismerteti.
| Tényezők | SerialGC | ParallelGC | G1GC | ZGC | ShenandoahGC |
|---|---|---|---|---|---|
| Magok száma | 1 | 2 | 2 | 2 | 2 |
| Többszálú | Nem | Igen | Igen | Igen | Igen |
| Java-halom mérete | <4 GB | <4 GB | >4 GB | >4 GB | >4 GB |
| Szünet | Igen | Igen | Igen | Igen (<1 ms) | Igen (<10 ms) |
| Felső | Minimális | Minimális | Mérsékelt | Mérsékelt | Mérsékelt |
| Vége-latencia Hatás | Magas | Magas | Magas | Alacsony | Mérsékelt |
| JDK-verzió | Összes | Összes | JDK 8+ | JDK 17+ | JDK 11+ |
| A következőkre alkalmas | Egymagos kis halmok | Többmagos, kis kupacmemóriát használó vagy bármilyen kupacmemória-méretű kötegelt számítási feladatok | Reagál közepes vagy nagy munkaterhelés esetén (kérelem-válasz/adatbázis interakciók) | Reagál közepes vagy nagy munkaterhelés esetén (kérelem-válasz/adatbázis interakciók) | Reagál közepes vagy nagy munkaterhelés esetén (kérelem-válasz/adatbázis interakciók) |
Jótanács
A legtöbb általános célú mikroszolgáltatás-alkalmazás esetében kezdje a párhuzamos GC-vel.
Annak meghatározása, hogy hány processzormagra van szüksége
A SerialGC kivételével minden GC esetén használjon két vagy több vCPU-magot – vagy Kubernetesen legalább 2000m értéket a(z) cpu_limit számára. Tárolóalapú környezetekben ne válasszon egynél kevesebb vCPU-magot.
Jótanács
Ha nem tudja, hány maggal kezdjen, jó választás két vCPU-mag.
Kiindulási pont kiválasztása
Kezdje két replikával vagy példánysal a tárolóvezénylési környezetekben, például a Kubernetesben, az OpenShiftben, a Azure Spring Apps, a Azure Container Apps és a Azure App Service. Az alábbi táblázat összefoglalja az új Java-alkalmazás tárolóba való tárolásának ajánlott kiindulópontjait.
| vCPU-magok | Konténermemória | JVM halomméret | szemétgyűjtés | Replikák |
|---|---|---|---|---|
| 2 | 4 GB | 75% | ParallelGC | 2 |
Használja a következő JVM-paramétereket:
-XX:+UseParallelGC -XX:MaxRAMPercentage=75
Meglévő helyszíni alkalmazás tárolóba helyezése
Ha az alkalmazás már fut a helyszínen vagy egy felhőbeli virtuális gépen, kezdje a következő konfigurációval:
- Ugyanaz a memóriamennyiség, amelyhez az alkalmazásnak jelenleg hozzáférése van.
- Az alkalmazás által jelenleg elérhető cpu-k vagy vCPU-magok száma.
- Ugyanazok a JVM-paraméterek, amelyeket jelenleg használ.
Ha a vCPU-magok vagy tárolómemória-kombináció nem érhető el, válassza ki a legközelebbit, és kerekítse fel a vCPU-magokat és a tárolómemóriát.
Következő lépések
Most, hogy megismerte az Java alkalmazások tárolóba helyezésére vonatkozó általános javaslatokat, folytassa a következő cikkel a tárolókezelési alapkonfiguráció létrehozásához: