获取容器内的docker cpu/内存限制

vmpqdwk3  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(806)

我在我的dockerized服务器中实现了一个特性,当cpu和内存利用率过高时,它将忽略一些请求。
我已经找到了如何获取容器中的进程使用的内存和cpu时间,但是我还需要一种获取cpu限制和内存限制(由运行时选项设置)的方法来计算百分比。
另外,我可以从中读取主机系统的负载 /proc/loadavg ,是否有“每箱货物”的地方我可以阅读?
我在openjdk 14上使用java/kotlin。
更新:我发现我可以从 /sys/fs/cgroup/memory/memory.limit_in_bytes

jvlzgdj9

jvlzgdj91#

这都是由cgroups控制的。因此,您可以检查cgroup限制和利用率:

$ docker run -it --rm --cpus 1.5 --memory 1g busybox /bin/sh
/ # cat /sys/fs/cgroup/memory/memory.usage_in_bytes
3043328
/ # cat /sys/fs/cgroup/memory/memory.limit_in_bytes
1073741824
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
150000
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
/ # cat /sys/fs/cgroup/cpu/cpuacct.usage
97206588

内存使用和限制是相当直接的监控。这比监视java堆使用情况更准确,因为堆只是java使用的内存的一部分。
期间的cpu配额给出分配的部分cpu数量,150000/100000=1.5。您可以随时间监视cpuacct.usage,以计算它何时超出限制并限制进程。

相关问题