Spring boot 使用Jmeter-Kubernetes测试后,spring引导的容器内存使用率不低
早上好。我有一个疑问,我对Kubernetes和Java(spring boot)比较陌生,我目前正在使用spring boot部署一个包含三个容器的pod,问题是我正在使用Jmeter进行测试,以在Kubernetes中使用HPA自动测量度量和缩放,但当你强调容器的内存增加时,我得到了这一点,但是,当我完成测试时,容器不会降低内存使用。我不知道由于JVM的原因,这个主题是否是Java的典型主题,或者垃圾收集器是否出现故障,我必须在docker映像中定义它。我在yaml清单的容器中给他一个CPU和内存方面的资源限制 这就是我的容器在使用Jmeter开始测试之前的情况 在使用Jmeter进行测试后,经过大约15分钟的时间,容器的内存也会随之增加: 以下是我定义Dockerfile的方式:Spring boot 使用Jmeter-Kubernetes测试后,spring引导的容器内存使用率不低,spring-boot,docker,kubernetes,memory,jvm,Spring Boot,Docker,Kubernetes,Memory,Jvm,早上好。我有一个疑问,我对Kubernetes和Java(spring boot)比较陌生,我目前正在使用spring boot部署一个包含三个容器的pod,问题是我正在使用Jmeter进行测试,以在Kubernetes中使用HPA自动测量度量和缩放,但当你强调容器的内存增加时,我得到了这一点,但是,当我完成测试时,容器不会降低内存使用。我不知道由于JVM的原因,这个主题是否是Java的典型主题,或者垃圾收集器是否出现故障,我必须在docker映像中定义它。我在yaml清单的容器中给他一个CPU
FROM openjdk:8-alpine
RUN rm -rf /var/cache/apk/*
RUN rm -rf /tmp/*
RUN apk update
RUN apk add busybox-extras
ENV UBICATION_CERTIFICATE_SSL=/etc/letsencrypt/tmp224.p12
ENV PASSWORD_CERTIFICATE_SSL=xxxxx
ENV ALIAS_CERTIFICATE_SSL=tmp224
ADD FindAccountNumber-0.0.1-SNAPSHOT.jar /home/app.jar
ADD tmp224.p12 /etc/letsencrypt/tmp224.p12
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/home/app.jar"]
我的清单yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: find-complementary-account-info-1
labels:
app: find-complementary-account-info-1
spec:
replicas: 2
selector:
matchLabels:
app: find-complementary-account-info-1
template:
metadata:
labels:
app: find-complementary-account-info-1
spec:
containers:
- name: find-account-number-1
image: find-account-number:latest
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: "250m"
memory: "350Mi"
requests:
cpu: "150m"
memory: "300Mi"
ports:
- containerPort: 8081
env:
- name: URL_CONNECTION_BD
value: jdbc:oracle:thin:@xxxxxxxx:1531/DEFAULTSRV.WORLD
- name: USERNAME_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-pers
key: user_pers
- name: PASSWORD_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-pers
key: password_pers
- name: find-account-validators-1
image: find-account-validators:latest
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: "250m"
memory: "350Mi"
requests:
cpu: "150m"
memory: "300Mi"
ports:
- containerPort: 8082
env:
- name: URL_CONNECTION_BD
value: jdbc:oracle:thin:@xxxxxxxx:1522/DEFAULTSRV.WORLD
- name: USERNAME_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-billing
key: user_billing
- name: PASSWORD_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-billing
key: password_billing
- name: find-complementary-account-info-1
image: find-complementary-account-info:latest
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: "250m"
memory: "350Mi"
requests:
cpu: "150m"
memory: "300Mi"
ports:
- containerPort: 8083
env:
- name: UBICATION_URL_ACCOUNT_NUMBER
value: "https://localhost:8081/api/FindAccountNumber"
- name: UBICATION_URL_ACCOUNT_VALIDATORS
value: "https://localhost:8082/api/FindAccountValidator"
---
apiVersion: v1
kind: Service
metadata:
name: svc-find-complementary-account-info-1
labels:
app: find-complementary-account-info-1
annotations:
metallb.universe.tf/allow-shared-ip: shared-ip
namespace: default
spec:
selector:
app: find-complementary-account-info-1
externalTrafficPolicy: Cluster
loadBalancerIP: 10.161.174.68
type: LoadBalancer
ports:
-
protocol: TCP
port: 8083
targetPort: 8083
nodePort: 30025
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: find-complementary-account-info-1
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: find-complementary-account-info-1
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
如何减少容器中使用spring boot时的内存,因为我认为它会随着压力的增加而不断增加,我认为差异非常小(~220 MB vs 250-290 MB),您不应该为此烦恼 但你似乎在谈论java应用程序(而不是)将内存返回操作系统。这是很长一段时间以来的常见行为,它取决于垃圾收集器-这并不意味着GC不工作。 您使用的是JDK 8,因此没有太多选择,但在更高版本中,有改进的收集器,例如
- jdk12中的g1gc:
- 谢南多阿