当前位置: 首页 > 知识库问答 >
问题:

用Jmeter - Kubernetes测试后,spring boot的容器内存使用率不低

魏宸
2023-03-14

早上好我有一个问题,我对Kubernetes和Java(spring-boot)比较陌生,目前我正在部署一个带有三个容器的pod,带有spring-boot,问题是我正在用Jmeter测试,以测量度量并使用Kubernete中的HPA自动伸缩,但当你强调容器的内存增加时,我会得到这个结果,但当我完成测试时,容器不会降低内存使用。我不知道这个主题是否是Java的典型主题,因为JVM,或者垃圾收集器是否出现故障,我必须在docker映像中定义它。我在yaml清单中给了他一个关于容器中CPU和内存的资源限制

这是我的容器在用Jmeter开始测试之前的情况

用Jmeter测试后,又通行了大约15分钟,容器在记忆方面也是如此:

这就是我定义Dockerfile的方式:

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引导时的内存,因为我认为它会随着压力的增加而不断增加

共有1个答案

宋丰
2023-03-14

我认为差异很小(〜220 MB与250-290 MB),你不应该为此烦恼。

但是你好像在说java应用程序(不是)把内存还给操作系统。很长一段时间以来,这一直是一种常见的行为,它依赖于垃圾收集器——这并不意味着垃圾收集器不起作用。你正在使用JDK 8,所以你没有太多的选择,但在以后的版本中有改进的收集器,例如

    < Li > JDK 12的G1 GC:及时从G1返回未使用的提交内存 雪兰多

您可以在此处找到更多信息:GC是否将内存释放回操作系统

 类似资料:
  • 在使用JUnit进行测试时,我无法理解一些事情,我编写了一些测试,而有些测试似乎可以简单地使用 而且 有些似乎不能与它们一起工作,所以我必须使用 而且 我理解@mockbean是在处理spring容器时使用的,而@mock只是用来复制/模拟某个类及其方法。但是什么时候才是使用@mockbean的最佳时机呢? 上面是我在spring boot应用程序中为一个控制器编写的测试,但当我使用@mock模拟

  • 嗨,我是JMeter的新手,我知道如何使用JMeter执行负载测试。我试图弄清楚压力测试或容量测试是如何通过JMeter执行的。是不是通过逐渐增加JMeter中的线程数,我们可以确定何时出现性能问题,并获得阈值,在阈值以上运行测试。那它会做压力测试吗? 在如何执行压力测试和能力测试与Jeter工具混淆。

  • 我需要使用Jmeter对一个有100个并发用户的网站进行负载测试,我创建了这样的测试计划-

  • 问题内容: 我在Linux下运行的Java应用程序有问题。 当启动应用程序时,使用默认的最大堆大小(64 MB),我看到使用tops应用程序为该应用程序分配了240 MB的虚拟内存。这会给计算机上的某些其他软件带来一些问题,这是相对有限的资源。 据我了解,保留的虚拟内存无论如何都不会使用,因为一旦达到堆限制,OutOfMemoryError就会抛出。我在Windows下运行了相同的应用程序,并且看

  • 我正在努力设置ssl来保护我的endpoint。我从我的组织中获得了一份考试证书 我收到一个. pfx文件 我把它转换成. pem----- 我们有基本的基础设施来解决这个问题。jks文件位于一个名为ssl的文件夹中,只需使用confg文件即可获取。 接下来我让杰米来测试这个。遵循步骤 设置一个测试记录器-- 2.将协议更改为https--- 我曾尝试在互联网上搜索和StackFlow有关测试SS

  • 我正在springboot应用程序中编写Junits,它只有一个初始化器类 以及其他控制器和服务类。 服务类的Junit如下所示: 当我运行Junit时,它会抛出如下错误: 我还尝试了所有注释,如,@ContextConfiguration(classes=Initializer.class),,但它仍会抛出相同的错误。代码中没有其他类似于应用程序上下文的配置类。