如何评估 linux 中特定 command/docker 的 CPU 和内存使用情况?

How to evaluate the CPU and Mem usage for speccific command/docker in linux?

我正在为 docker 中的脚本 运行 编写 yaml 文件,并由 kubernetes 编排。有没有办法评估特定命令或 docker 的资源利用率,或者为 pods 设置 cpu 和内存限制的最佳做法是什么?

编辑

这些脚本中的大多数会在短时间内运行,因此很难获取资源信息。我只是想尝试找到一个工具来获得 cpu 和 mem 的最大使用,该工具的工作方式类似于 time,以打印出执行时间。

您可以使用 docker stats 命令查看容器的统计信息。

例如;

docker stats containera containerb

CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O               BLOCK I/O
containera          0.00%               24.15 MB / 1.041 GB   2.32%               1.8 MB / 79.37 kB     0 B / 81.92 kB
containerb          0.00%               24.95 MB / 1.041 GB   2.40%               1.798 MB / 80.72 kB   0 B / 81.92 kB

或者,使用 docker top <container>

查看容器中的进程 运行
docker top containera
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4558                2850                0                   21:13               ?                   00:00:00            sh -c npm install http-server -g && mkdir -p /public && echo "welcome to containera" > /public/index.html && http-server -a 0.0.0.0 -p 4200
root                4647                4558                0                   21:13               ?                   00:00:00            node /usr/local/bin/http-server -a 0.0.0.0 -p 4200

资源有限

Docker compose(就像 docker 本身)允许您为容器设置资源限制,例如,限制使用的最大内存量,cpu-shares 等。

阅读 docker-compose yaml reference, and the docker run reference on "Runtime constraints on resources"

中的这一部分

问题中有一些很好的答案:Peak memory usage of a linux/unix process

TL;DR: /usr/bin/time -v <command> 或使用 valgrind.

这应该可以帮助您了解需要分配多少内存作为应用程序的限制,但 CPU 有点不同。如果您的应用程序是 CPU 绑定的,那么无论您设置什么限制,它都会使用您提供的所有 CPU。此外,在 Kubernetes 中,您将内核(或毫内核)分配给应用程序,因此了解在任何特定机器上使用了 CPU 的百分比并不总是非常有用,因为这不会轻易转换为内核。

您应该为您的应用提供尽可能多的 CPU 核心,让您的应用在可接受的时间内取得成功。这将取决于成本以及集群中可用的核心数。它还在一定程度上取决于您的应用程序的架构。例如,如果应用程序不能利用多核,那么给它超过 1 个就没有多大用处了。

如果您还有 运行 个应用程序,您可以尝试安装 Kubedash。如果你安装了 Heapster,那么 Kubedash 会使用 Kubernetes 的内置指标来显示平均和最大 CPU/Memory 利用率。当试图找出分配给特定应用程序的请求和限制时,它有很大帮助。

希望对您有所帮助!