Load Average与TASK_UNINTERRUPTIBLE

Load Average与TASK_UNINTERRUPTIBLE

Content #

Linux中,用 Cgroups 做了配置,即使保证了容器的 CPU 资源,然而 Load Average 值升高,应用的性能下降,这背后的原因是什么呢?

Linux下Load Average计算公式: Load Average= 可运行队列进程平均数 + 休眠队列中不可打断的进程平均数

Linux 下的 Load Averge 不仅仅计算了 CPU Usage 的部分,它还计算了系统中 TASK_UNINTERRUPTIBLE 状态的进程数目。在 Linux 内核中有数百处调用点,它们会把进程设置为 D 状态,主要集中在 disk I/O 的访问和信号量(Semaphore)锁的访问上,因此 D 状态的进程在 Linux 里是很常见的。无论是对 disk I/O 的访问还是对信号量的访问,都是对 Linux 系统里的资源的一种竞争。当进程处于 D 状态时,就说明进程还没获得资源,这会在应用程序的最终性能上体现出来,也就是说用户会发觉应用的性能下降了。

Viewpoint #

From #

平均负载