服务CPU受限分析思路

550 阅读1分钟

受限,CPU受限不是CPU打满(使用率100%)的意思,这个需要注意。

在k8s的体系中,多个pod可以被部署在同一台物理机上,而每个pod可以理解为我们运行的一个服务实例,他们共同分享这台物理机的资源(存储、网络等)。

pod cpu受限:是指一个pod在短时间内(一个周期内)用完了操作系统分配给它的cpu quota,在这个周期的后续时间内,这个pod的所有进程都会被夯住。而进程被夯住,自然就会影响服务的延迟时间(接口latency),从而影响服务稳定性。

受限机制:一个服务在一个物理机(假定核数为32)分配了8核的pod,那么在cpu.cfs_period_us为100ms(即时间片为100ms)的情况下,cpu_quota_us的值为800ms(每个核都会执行一个时间片,即一个周期内可以执行的时间为800ms)。假设这个pod在100Ms的时间片内,前50ms就用完了800ms的cpu时间,那么在这个周期剩余的50ms内,这个pod的程序就会夯住。

问题:一个8核的pod,怎么能够在50ms内消耗800ms的CPU时间呢?

解释:一个8核的pod ≠ pod里的线程只能在8个核心内运行。pod里的线程,可以在物理机的任何核心上调度运行(在这个case里,只要物理机的核心 >= 16就行了)

分析思路:查看服务监控,或者查看服务的火焰图来分析是否有特别消耗CPU的函数