Ansible性能优化(一):降低工作进程(WorkerProcess)列表检查频率

更新时间:2023-06-14 02:50:56 阅读: 评论:0

Ansible性能优化(⼀):降低⼯作进程(WorkerProcess)列表检查频率
(本⽂基于Ansible 2.7)
在⼀⽂中,我们分析了Ansible⼯作进程的启动和并发机制,本⽂不再赘述。
本⽂主要探讨StrategyBa._queue_task⽅法中检查TaskQueueManager._workers是否有空闲槽位来容纳新的⼯作进程的轮询过程。
while True:
优秀的简历worker_prc = lf._workers[lf._cur_worker]
if worker_prc is None or not worker_prc.is_alive():
lf._queued_task_cache[(host.name, task._uuid)]={
'host': host,
'task': task,
'task_vars': task_vars,排山倒海的近义词
'play_context': play_context
}
worker_prc = WorkerProcess(lf._final_q, task_vars, host, task, play_context, lf._loader, lf._variable_manager, shared_loader_obj)
lf._workers[lf._cur_worker]= worker_prc
worker_prc.start()
城市旅游display.debug("worker is %d (out of %d available)"%(lf._cur_worker +1,len(lf._workers)))
queued =True
lf._cur_worker +=1
成就的英语if lf._cur_worker >=len(lf._workers):
乡音不改lf._cur_worker =0
if queued:
break
elif lf._cur_worker == starting_worker:
time.sleep(0.0001)
从以上代码可以看到,当⼀个新的Task因⼯作进程的数量限制⽽⽆法开始执⾏的时候,_queue_task会每隔0.1ms检查整个workers列表,直到找到空闲的worker进程槽位。这个时间在最新的2.9.0 stable版本中仍然没有修改。
积累
最近我们观察作业的运⾏过程中发现,如果forks设置⼩于总的task数量,且单个task的执⾏时间较长的时候,服务器的CPU消耗从整个play启动时的极速飙升⾄100%,持续⼀段时间后缓慢下降,会在50%左右的⽔平上稳定相当长的时间。我们的服务器是双核⼼的虚拟机,50%这个数字很容易让我联想到这是⼀个核⼼满载了。
时光薄凉
我做了个测试,物理CPU⾄强E5 5649 2.53G hz的虚拟机,启动⼀个ping task,万兆⽹络整个⼯作进程从启动到结果从远端返回,本地进程结束,耗时在1秒+不到2秒的样⼦。
这也就是说检查的频率是在⼀个ping task执⾏时间区间内执⾏⼀万次以上。如果task的执⾏过程更长(⽐如5分钟),这个轮询检查的频率如此之⾼就更没有意义——即使能更快地发现空闲的槽位,相
对于⼀个作业执⾏的时间来说也是九⽜⼀⽑,还不如适当降低检查的频率,让CPU可以调度新的play。
⽬前我们采⽤的⽅案是将这个休眠时间调整到0.1秒,收效还不错。加上调整DEFAULT_INRERNAL_POLL_INTERVAL的值
(见),workers占满后CPU占⽤可以降到5%-10%之间,其中us和sy基本上⼀半⼀半。
白日梦英文

本文发布于:2023-06-14 02:50:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1037448.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   时间   空闲   启动   检查   没有
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图