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 ... | 嵌套结构,仅供专家使用 |
.CPU | CPU使用率百分比,全精度浮点数 |
.CPUNano | CPU总使用量,以纳秒为单位 |
.CPUPerc | 使用的CPU百分比 |
.CPUSystemNano | 内核使用的CPU时间,以纳秒为单位 |
.Duration | 与CPUNano相同 |
.ID | 容器ID,截断后的形式 |
.MemLimit | 内存限制,以字节为单位 |
.MemPerc | 内存使用率百分比 |
.MemUsage | 内存使用量 |
.MemUsageBytes | 内存使用量(IEC格式) |
.Name | 容器名称 |
.NetIO | 网络IO |
.Network ... | 根据网络接口分开的网络I/O信息 |
.PerCPU | 所有任务消耗的CPU时间[1] |
.PIDs | PID数量 |
.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_io
和block_io
的值同样为-- / --
表示网络 I/O 和块 I/O 没有被测量或无法计算。- 在使用 slirp4netns 网络和 rootlesskit 端口处理器时,通过端口转发发送的流量会计入
lo
设备。lo
设备上的流量在统计输出中不会被计算。
相关命令
- podman(1):
podman
的主命令文档。
历史
- 2017 年 7 月,最初由 Ryan Cole rycole@redhat.com 整理。
随着 podman
的不断发展和更新,相关的命令和选项也可能会有所变化。因此,建议查阅最新的官方文档或运行 podman --help
和 podman stats --help
来获取最新的命令和选项信息。