Jan*_*ana 3 javascript heap-memory node.js docker kubernetes
我的 Node.js 应用程序有 16 个微服务,一个docker 镜像,并通过 kubernetes 托管在 google 云平台中。
但仅对于100 个用户的 api 请求,一些主要的 docker 镜像会因堆内存不足而崩溃 - javascript。
我检查了这些图像,发现 Node.js 的堆内存限制为 1.4 GB。但由于 API 流量也很少,它很快就会得到充分利用。
如何为node.js管理/分配堆内存docker/kubernetes?或者,有什么方法可以找出内存泄漏发生的位置吗?
从 kubernetes 的角度来看,您应该考虑管理容器计算资源的概念:
当您创建 Pod 时,Kubernetes 调度程序会选择 Pod 运行的节点。每个节点对于每种资源类型都有最大容量:它可以为 Pod 提供的CPU 和内存量 。调度器确保对于每种资源类型,调度的Container的资源请求总和小于节点的容量。
spec.containers [].resources.limits.memory被转换为整数,并用作docker run 命令中 --memory 标志的值。
如果节点有可用内存,容器可能会超出其内存请求。但容器使用的内存不得超过其限制。如果容器分配的内存超过其限制,则该容器将成为终止的候选者。如果容器继续消耗超出其限制的内存,则容器将被终止。
为什么要使用内存限制:
容器对其使用的内存量没有上限。容器可以使用运行它的节点上的所有可用内存,这反过来又可以调用 OOM Killer。
作为使用资源请求和限制的示例:
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"]
Run Code Online (Sandbox Code Playgroud)
要了解有关您的 Pod/容器状态的更多信息,您可以使用:
kubectl describe pod your_pod
If metric server was installed:
kubectl top pod your_pod ## to see memory usage.
Run Code Online (Sandbox Code Playgroud)
从 Node.js 的角度来看,您可能会对以下内容感兴趣:
希望这有帮助。
其他资源: