我的node.js应用程序具有16个微服务和docker Image,并托管在带有kubernetes的Google云平台中。
但仅用于100个用户的api请求,由于堆内存不足-javascript,一些主要的docker映像已崩溃。
我检查了这些图像,并且node.js的堆内存限制为1.4 Gb。但是,由于API流量很少,它很快也将得到充分利用。
如何为node.js管理/分配堆内存docker / kubernetes?另外,有什么办法可以找出发生内存泄漏的地方吗?
从kubernetes的角度,您应该考虑Managing Compute Resources for Containers的概念:
创建Pod时,Kubernetes调度程序为Pod选择一个要在其上运行的节点。每个节点对于每种资源类型都有最大容量:CPU和内存量 它可以为Pod提供。调度程序确保对于每种资源类型,已调度容器的资源请求总数小于节点的容量。
spec.containers []。resources.limits.memory转换为整数,并用作-docker run命令中的内存标志]的值。]
如果节点有可用内存,则容器可以超出其内存请求。但是不允许容器使用超出其内存限制的位置
。如果容器分配的内存超过其限制,则该容器将成为终止的候选者。 如果容器继续消耗超出其限制的内存,则容器终止。为什么使用内存限制:
容器在其使用的内存量上没有上限。容器可以使用其正在运行的节点上的所有可用内存,从而可以调用OOM Killer。
作为使用resource requests and limits的示例:
apiVersion: v1 kind: Pod metadata: name: memory-demo-2 namespace: mem-example spec: containers: - name: memory-demo-2-ctr image: polinux/stress resources: requests: memory: "50Mi" limits: memory: "100Mi" command: ["stress"] args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"]
要了解有关豆荚/容器状态的更多信息,可以使用:
kubectl describe pod your_pod If metric server was installed: kubectl top pod your_pod ## to see memory usage.
从node.js的角度来看,您可能会感兴趣:
希望获得帮助。
其他资源: