我在Kubernetes集群上运行了一个openjdk:8镜像。我添加了内存HPA(水平Pod自动缩放),它可以正常扩展,但由于JVM不会将堆中的内存释放回操作系统,因此Pod不会缩小。以下是hpa.yaml:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: image-server
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: image-server
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 60
解决这个问题的一种方法是使用正确的GC并释放内存,但由于JVM出于性能原因而被设计为不经常从堆中释放,因此这样做并不是一个好主意。是否有一种方法可以从Kubernetes处理这个问题?例如,我们可以不检查操作系统的内存使用情况,而是直接检查堆的内存使用情况并进行缩放?