Linux操作系统load average过高,kworker占用较多cpu
Linux操作系統(tǒng)load average過(guò)高,kworker占用較多cpu
今天巡檢發(fā)現(xiàn),mc1的K8S服務(wù)器集群有些異常,負(fù)載不太均衡。其中10.2.75.32-34,49的load average值都在40以上,雖然機(jī)器的cpu核數(shù)都是40或48核不算嚴(yán)重,但也值得重視。
?
登陸機(jī)器查看,執(zhí)行top發(fā)現(xiàn),cpu的使用率接近40%,sys有20-30,user有10-20。也發(fā)現(xiàn)有大量的內(nèi)核線(xiàn)程[kworker]占用比較多的使用率。如下是在下午7點(diǎn)多的截圖,如果是高峰期9點(diǎn),kworker的數(shù)字多數(shù)是在20-30之間,說(shuō)明占用了比較多的cpu資源。
順著這個(gè)方向排查。[kworker]這種內(nèi)核線(xiàn)程使用的是內(nèi)核工作隊(duì)列模式,1個(gè)cpu就產(chǎn)生對(duì)應(yīng)的1個(gè)內(nèi)核線(xiàn)程。參考了這個(gè)文章:https://yq.aliyun.com/articles/504369
里面有說(shuō)到kworker的排查方面,即用ftrace命令,排查workqueue_queue_work中什么函數(shù)調(diào)用最多。
在機(jī)器上安裝ftrace,參考文章:https://linux.cn/article-9273-1.html
apt-get install trace-cmd
裝上后運(yùn)行一段時(shí)間查看
trace-cmd record -e workqueue:workqueue_queue_work
trace-cmd report > result
把結(jié)果保存到result后,進(jìn)行分析結(jié)果得出:
這個(gè)dbs_timer的function運(yùn)行數(shù)量極大。關(guān)鍵字搜索一下,感覺(jué)有點(diǎn)是這個(gè)引起的問(wèn)題,因?yàn)檫@個(gè)函數(shù)是跟cpu動(dòng)態(tài)調(diào)整頻率有關(guān)系,而cpu調(diào)頻是用來(lái)省電用的
具體通過(guò)學(xué)習(xí)了cpufreq的知識(shí):
https://www.ibm.com/developerworks/cn/linux/l-cn-cpufreq/index.html
http://abcdxyzk.github.io/blog/2015/08/12/kernel-cpufreq/
里面提到一點(diǎn):
Cpufreq 作為一個(gè)子系統(tǒng)最早被加入到 Linux 內(nèi)核中時(shí)只配備了 governors ,分別是performance、powersave 和 userspace,ondemand。當(dāng)用戶(hù)選擇使用 performance governor 時(shí),CPU會(huì)固定工作在其支持的最高運(yùn)行頻率上;當(dāng)用戶(hù)選擇使用 powersave governor 時(shí),CPU會(huì)固定工作在其支持的最低運(yùn)行頻率上。因此這兩種 governors 都屬于靜態(tài) governor ,即在使用它們時(shí)CPU?的運(yùn)行頻率不會(huì)根據(jù)系統(tǒng)運(yùn)行時(shí)負(fù)載的變化動(dòng)態(tài)作出調(diào)整。這兩種governors 對(duì)應(yīng)的是兩種極端的應(yīng)用場(chǎng)景,使用 performance governor 體現(xiàn)的是對(duì)系統(tǒng)高性能的最大追求,而使用 powersave governor 則是對(duì)系統(tǒng)低功耗的最大追求。
安裝下面的軟件查看配置:
apt-get install cpufrequtils
但是我們的cpu配置是這樣的:
初步懷疑:cpu的動(dòng)態(tài)調(diào)頻策略,導(dǎo)致每隔一段時(shí)間就要執(zhí)行od_dbs_timers函數(shù)(調(diào)用dbs_timers的調(diào)用者),來(lái)判斷cpu是否要進(jìn)行降頻或者升頻,因?yàn)槲覀兊倪M(jìn)程數(shù)量特別多,所以也可能會(huì)加快這個(gè)策略的運(yùn)行頻率。最后就導(dǎo)致kworker占用比較高的資源。
?
為了確認(rèn)是否這個(gè)引起的,下午7點(diǎn)多的時(shí)候在3臺(tái)機(jī)器上進(jìn)行了驗(yàn)證,把cpufreq的策略改為performance,這個(gè)策略上面說(shuō)過(guò)cpu將不會(huì)進(jìn)行調(diào)頻,這3臺(tái)機(jī)器都是kworker還處于比較高使用率情況的
for i in $(ls /sys/devices/system/cpu/*/cpufreq/scaling_governor);do echo performance > $i;done
查看實(shí)際的模式是否修改完成
等待片刻后,load average 下降很多, kworker也從top命令的首頁(yè)中消失,cpu的sys和user使用率也降低,說(shuō)明這個(gè)改動(dòng)是有效的。
在類(lèi)似K8S這種負(fù)載比較高,進(jìn)程數(shù)量多的服務(wù)器上,應(yīng)該要關(guān)閉這個(gè)調(diào)頻功能,雖然不省電,但至少可以避免在負(fù)載出現(xiàn)一定程度的情況下內(nèi)核線(xiàn)程反而會(huì)加大cpu資源消耗的情況。
?
轉(zhuǎn)載于:https://www.cnblogs.com/williamjie/p/10836799.html
總結(jié)
以上是生活随笔為你收集整理的Linux操作系统load average过高,kworker占用较多cpu的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CSS基础学习 18.CSS多列
- 下一篇: PDF去水印教程