跳到主要内容

podman -stats - 显示一个或多个容器的资源使用统计信息的实时流

摘要

podman stats [选项][*容器名或ID*]

podman container stats [选项][*容器名或ID*]

描述

显示一个或多个容器的资源使用统计信息的实时流。

注意:在使用CGroups V1的rootless环境中,Podman stats无法正常工作。 Podman stats依赖于CGroup信息来获取统计信息,而CGroup v1不支持rootless用例。

注意:使用CGroups V2的rootless环境无法报告其网络使用情况的统计信息。

选项

--all, -a

显示所有容器。默认情况下,仅显示正在运行的容器。

--format=template

以JSON格式或Go模板格式美化输出容器统计信息。

Go模板可用的有效占位符如下:

占位符描述
.AvgCPU平均CPU使用率,全精度浮点数
.AVGCPU平均CPU使用率,格式化后的百分比形式
.BlockInput从块设备读取的总数据量
.BlockIO读取/写入块设备的总数据量
.BlockOutput写入块设备的总数据量
.ContainerID容器ID,完整的(未截断)哈希值
.ContainerStats ...嵌套结构,仅供专家使用
.CPUCPU使用率百分比,全精度浮点数
.CPUNanoCPU总使用量,以纳秒为单位
.CPUPerc使用的CPU百分比
.CPUSystemNano内核使用的CPU时间,以纳秒为单位
.Duration与CPUNano相同
.ID容器ID,截断后的形式
.MemLimit内存限制,以字节为单位
.MemPerc内存使用率百分比
.MemUsage内存使用量
.MemUsageBytes内存使用量(IEC格式)
.Name容器名称
.NetIO网络IO
.Network ...根据网络接口分开的网络I/O信息
.PerCPU所有任务消耗的CPU时间[1]
.PIDsPID数量
.PIDS容器内进程的数量。注意,这与之前的.PIDs是重复的,可能是一个打字错误。
.SystemNano当前系统时间,自纪元以来的纳秒数。这不是关于容器的统计信息,而是当前系统的时间戳。
.Up容器运行时间的持续时间,以人类可读的格式显示。这是基于.CPUNano字段转换而来的。
.UpTime.Up相同,显示容器运行时间的持续时间。

[1] .PerCPU 是一个数组,其中每个条目代表一个CPU核心的CPU时间。其长度与系统的CPU核心数相匹配。

使用--format选项,用户可以自定义输出,以便更好地适应他们的需求或集成到脚本中。例如,您可能想要仅显示某些容器的CPU和内存使用情况,或者将输出格式化为特定的JSON结构,以便于后续解析。 当使用docker stats命令的--format选项时,可以指定一个Go模板来定制输出格式。以下是对已知占位符的补充和说明:

请注意,.SystemNano占位符并不提供关于容器的运行时间或统计信息,而是表示当前系统的时间戳。这可能是用于其他目的,例如日志记录或时间戳标记。

在使用Go模板时,如果在格式字符串前加上table,将会打印出表头(headers)。这有助于以表格形式清晰地展示统计信息,使得输出更易读。

此外,需要注意的是,某些占位符可能仅适用于特定的cgroup版本(如Cgroups V1)。在使用这些占位符时,请确保您的系统配置与占位符的要求相匹配。

最后,为了获得最准确和最新的占位符列表,建议查阅Docker的官方文档或相关资源,因为Docker版本更新可能会引入新的占位符或更改现有占位符的行为。

--interval, -i=seconds

设置两次报告统计信息之间的时间间隔,以秒为单位。默认为5秒。

--latest

仅显示最新的容器统计信息。

--no-reset

在每次报告统计信息时,不重置之前的统计数据。

--no-stream

不启用流模式,只获取一次统计信息并返回。

--no-trunc

不截断输出。

示例

列出所有正在运行的容器的统计信息,不启用流模式:

# podman stats -a --no-stream
ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS
a9f807ffaacd frosty_hodgkin -- 3.092MB / 16.7GB 0.02% -- / -- -- / -- 2
3b33001239ee sleepy_stallman -- -- / -- -- -- / -- -- / -- --

以流模式列出指定容器的统计信息:

# podman stats a9f80
ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS
a9f807ffaacd frosty_hodgkin -- 3.092MB / 16.7GB 0.02% -- / -- -- / -- 2

以表格形式列出指定容器的指定统计信息:

podman stats --no-trunc 3667 --format 'table {{ .ID }} {{ .MemUsage }}'
ID MEM USAGE / LIMIT
3667c6aacb06aac2eaffce914c01736420023d56ef9b0f4cfe58b6d6a78b7503 49.15kB / 67.17GB

以JSON格式列出指定容器的统计信息:

podman stats --format '{{json .}}' 3667
{
"ID": "3667c6aacb06aac2eaffce914c01736420023d56ef9b0f4cfe58b6d6a78b7503",
"Name": "container_name",
"CPU": "0.0%",
"MemUsage": "49.15kB",
"MemLimit": "67.17GB",
"MemPerc": "0.00%",
"NetIO": "0B / 0B",
"BlockIO": "0B / 0B",
"PIDs": 5
}

在上面的JSON格式示例中,3667 是容器的ID,而 {{json .}} 是一个Go模板占位符,它告诉 podman stats 命令以JSON格式输出容器的完整统计信息。您可以根据需要调整Go模板来仅输出特定的统计字段。

podman stats --no-stream --format=json a9f80

[
{
"id": "a9f807ffaacd",
"name": "frosty_hodgkin",
"cpu_percent": "--",
"mem_usage": "3.092MB / 16.7GB",
"mem_percent": "0.02%",
"net_io": "-- / --",
"block_io": "-- / --",
"pids": "2"
}
]

说明

上面的命令使用 podman stats 来获取指定容器(ID 为 a9f80)的统计信息,并通过 --no-stream 标志来禁止流模式(即只获取一次统计信息)。--format=json 标志告诉 podman 以 JSON 格式输出统计信息。

返回的 JSON 对象包含了容器的 ID、名称、CPU 使用率、内存使用情况、内存使用率、网络 I/O、块 I/O 以及进程数量。

注意

  • cpu_percent 的值为 -- 表示 CPU 使用率没有被测量或无法计算。
  • net_ioblock_io 的值同样为 -- / -- 表示网络 I/O 和块 I/O 没有被测量或无法计算。
  • 在使用 slirp4netns 网络和 rootlesskit 端口处理器时,通过端口转发发送的流量会计入 lo 设备。lo 设备上的流量在统计输出中不会被计算。

相关命令

历史

随着 podman 的不断发展和更新,相关的命令和选项也可能会有所变化。因此,建议查阅最新的官方文档或运行 podman --helppodman stats --help 来获取最新的命令和选项信息。