Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób konteneryzowania aplikacji Java na potrzeby wdrażania na platformie Kubernetes. Aby uzyskać wskazówki dotyczące pamięci kontenera, pamięci sterty JVM, kolektorów pamięci (GCs) i rdzeni vCPU, zobacz Konteneryzacja aplikacji Java.
Określanie odpowiedniego SKU maszyny wirtualnej dla puli węzłów Kubernetes
Ustal, czy dostępne dla klastra pule węzłów Kubernetes mogą pomieścić pamięć kontenera i rdzenie procesorów wirtualnych, które zamierzasz użyć. Jeśli pula węzłów może hostować aplikację, kontynuuj. W przeciwnym razie skonfiguruj pulę węzłów odpowiednią do ilości pamięci kontenera i liczby rdzeni procesorów wirtualnych, które są docelowe.
Należy pamiętać, że koszt jednostki SKU maszyny wirtualnej jest proporcjonalny do liczby rdzeni i ilości pamięci. Po określeniu punktu początkowego pod względem wirtualnych procesorów i pamięci dla jednego wystąpienia kontenera sprawdź, czy potrzeby aplikacji można spełnić tylko poprzez skalowanie poziome. W przypadku niezawodnych systemów zawsze włączonych muszą być dostępne co najmniej dwie repliki. Skalowanie w górę i w poziomie zgodnie z potrzebami.
Ustaw żądania i limity CPU
Jeśli musisz ograniczyć CPU, upewnij się, że zastosowano tę samą wartość dla limits i requests w pliku wdrożenia. JVM nie dostosowuje dynamicznie swojego czasu wykonywania, na przykład GC i innych pul wątków. JVM odczytuje liczbę procesorów dostępnych tylko w czasie uruchamiania.
Wskazówka
Ustaw tę samą wartość dla żądań CPU i limitów procesora.
containers:
- image: myimage
name: myapp
resources:
limits:
cpu: "2"
requests:
cpu: "2"
Omówienie dostępnych procesorów JVM
Gdy funkcja JVM hotSpot w zestawie OpenJDK identyfikuje, że działa wewnątrz kontenera, używa wartości, takich jak cpu_quota i cpu_period do określenia, ile procesorów jest dostępnych. Ogólnie rzecz biorąc, każda wartość do 1000m milicory jest uznawana za maszynę z jednym procesorem. Każda wartość między 1001m i 2000m jest identyfikowana jako maszyna z podwójnym procesorem itd. Te informacje są dostępne za pośrednictwem interfejsu API Runtime.getRuntime().availableProcessors(). Niektóre współbieżne kontrolery domeny mogą również używać tej wartości do konfigurowania ich wątków. Inne interfejsy API, biblioteki i struktury mogą również używać tych informacji do konfigurowania pul wątków.
Limity przydziału procesora KUBernetes są związane z ilością czasu spędzanego przez proces w procesorze CPU, a nie liczbą procesorów dostępnych dla tego procesu. Środowiska uruchomieniowe wielowątowe, takie jak JVM, mogą nadal używać wielu procesorów jednocześnie z wieloma wątkami. Nawet jeśli kontener ma limit jednego procesora wirtualnego, maszyna wirtualna JVM może być poinstruowana, aby wyświetlić co najmniej dwa dostępne procesory.
Aby poinformować maszynę wirtualną JVM o dokładnej liczbie procesorów, które powinny być widoczne w środowisku Kubernetes, użyj następującej flagi JVM:
-XX:ActiveProcessorCount=N
Ustawianie żądań i limitów pamięci
Ustaw limity pamięci na określoną wcześniej ilość. Upewnij się, że liczba limitów pamięci to pamięć kontenera, a nie wartość pamięci stertowej JVM.
Wskazówka
Ustaw żądania pamięci równe limitom pamięci.
containers:
- name: myimage
image: myapp
resources:
limits:
memory: "4Gi"
requests:
memory: "4Gi"
Ustawianie argumentów JVM w pliku wdrożenia
Pamiętaj, aby ustawić pamięć stert JVM na wcześniej określoną wartość. Zalecamy przekazanie tej wartości jako zmiennej środowiskowej, aby można było ją łatwo zmienić bez konieczności ponownego kompilowania obrazu kontenera.
containers:
- name: myimage
image: myapp
env:
- name: JAVA_OPTS
value: "-XX:+UseParallelGC -XX:MaxRAMPercentage=75"
Dalsze kroki
- Strategie konteneryzacji języka Java
- Jakarta EE w środowiskach uruchomieniowych kontenera platformy Azure
- Oracle WebLogic Server
- IBM WebSphere Liberty, Open Liberty i tradycyjne WebSphere