如何评估 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 利用率。当试图找出分配给特定应用程序的请求和限制时,它有很大帮助。
希望对您有所帮助!
我正在为 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 利用率。当试图找出分配给特定应用程序的请求和限制时,它有很大帮助。
希望对您有所帮助!