代码之家  ›  专栏  ›  技术社区  ›  Artsiom Miksiuk

K8s pod内存高于进程要求

  •  4
  • Artsiom Miksiuk  · 技术社区  · 5 年前

    rss: 161509376, 
    heapTotal: 97697792, 
    heapUsed: 88706896, 
    external: 733609
    

    命令kubectl-top-pod,上面显示了pod正在使用多少内存。

    NAME                              CPU(cores)   MEMORY(bytes)
    api-596d754fc6-s7xvc              2m           144Mi 
    

    ...
    resources:
      limits:
        memory: 400Mi
        cpu: 2
      requests:
        memory: 90Mi
        cpu: 100m
    

    所以,请求的内存比k8s显示给我的内存低。我希望看到,会有一些更接近实际的内存消耗,比如说100MB。

    所有测试都在一个pod上启动(单个服务有一个pod,这里没有错误)。

    更新1。

    FROM node:8-alpine
    
    ENV NODE_ENV development
    ENV PORT XXXX
    
    RUN echo https://repository.fit.cvut.cz/mirrors/alpine/v3.8/main > /etc/apk/repositories; \
        echo https://repository.fit.cvut.cz/mirrors/alpine/v3.8/community >> /etc/apk/repositories
    
    RUN apk update && \
        apk upgrade && \
        apk --no-cache add git make gcc g++ python
    
    RUN apk --no-cache add vips-dev fftw-dev build-base \
        --repository https://repository.fit.cvut.cz/mirrors/alpine/edge/testing/ \
        --repository https://repository.fit.cvut.cz/mirrors/alpine/edge/main
    
    WORKDIR /app
    
    COPY ./dist /app
    
    RUN npm install --only=production --unsafe-perm
    
    RUN apk del make gcc g++ python build-base && \
        rm /var/cache/apk/*
    
    EXPOSE XXXX
    
    CMD node index.js
    

    Docker的形象看起来是这样的。

    1 回复  |  直到 5 年前
        1
  •  0
  •   Rico    5 年前

    因此,Node.js(和其他语言运行时)中消耗内存的唯一其他方面是垃圾收集器。你没有描述你是否看到了一个向上的消费模式,但如果你看到了,很可能你有某种泄漏。如果您的消耗量保持稳定,则可能是特定应用程序的垃圾收集器消耗的给定量。有关垃圾收集器什么时候在做什么的更多信息,可以使用 node-gc-profiler

    这个 blog 揭示了Node.js、内存消耗和垃圾收集。还有大量关于如何解决Node.js内存使用和垃圾回收问题的在线资源。 [1] , [2] [3] 等等。

    希望有帮助!

        2
  •  0
  •   Nico    5 年前

    您很可能看到pod实际内存消耗和内核用于文件缓存的缓冲区/缓存内存的合并。

    这可能是Kubernetes本身的一个bug。请参阅本期: https://github.com/kubernetes/kubernetes/issues/43916