我正在我的 dockerized 服务器中实现一个功能,当 CPU 和内存利用率过高时,它会忽略一些请求。
我已经找到了如何获取容器here内进程使用的内存和cpu时间,但我还需要一种方法来获取cpu限制和内存限制(由Runtime Options设置)来计算百分比。
此外,我可以从 /proc/loadavg
读取主机系统的负载,是否有我可以读取的“每个容器负载”?
我在 openjdk 14 上使用 Java/Kotlin。
更新:我发现我可以从 /sys/fs/cgroup/memory/memory.limit_in_bytes
答案 0 :(得分:1)
这都是由cgroups控制的。因此您可以检查 cgroup 限制和利用率:
export const builderReducer = createReducer(
initialState,
on(BuilderActions.setSelectedCourseContentUid, (state, { selectedCourseContentUid }) => {
return {
...state,
selectedCourseContentUid,
};
})
);
内存使用情况和限制非常容易监控。这比监视 Java 堆使用情况更准确,因为堆只是 Java 使用的内存的一部分。
此期间的 CPU 配额为您提供了分配的小数 CPU 数量,150000/100000 = 1.5。您可以随着时间的推移监控 cpuacct.usage 以计算它何时超过限制并限制您的进程。