所有这些都是由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,以计算何时超出限制并使进程受到限制。
/sys/fs/cgroup/cpu.max
,因为其他位置不可见。 - undefined/ # cat /sys/fs/cgroup/memory.current
503808
/ # cat /sys/fs/cgroup/memory.max
1073741824
/ # cat /sys/fs/cgroup/cpu.stat
usage_usec 58384
user_usec 23602
system_usec 34782
nr_periods 37
nr_throttled 0
throttled_usec 0
/ # cat /sys/fs/cgroup/cpu.max
150000 100000
请参见:https://facebookmicrosites.github.io/cgroup2/docs/cpu-controller.html
请参见:https://facebookmicrosites.github.io/cgroup2/docs/memory-controller.html