首页 欧洲联赛正文

最开端公司运维同学反应,单个宿主机上存在进程CPU峰值运用率反常的现象。而数万台机器中只呈现了几例,也便是说万分之几的概率。监控发生的一些小差错,不会形成宕机等严峻后果,很简略就此被忽略了。

但咱们考虑到这个反常转瞬即逝、并不esu恶俗易被发觉,或许还存在更多这样的机器,又或许现在正常将来又不正常,内核研制天性的好奇心让咱们感到:此事必有奇怪!所以清查下去。

问题现象

现象一:CPU监控非0即100%

该问题现象表现在Redis进程CPU监控的峰值时而100% 时而为0,有的乃至是几十分钟都为0,突发1秒100%后又变为0,如下图。

而从许多机器的计算规则看,这个现象在2.6.32 内核不存在,在4.1内核存在几例。2.6.32是咱们较前期选用的版别,为渠道的安稳发展做了有力支撑,4.1 能够满意许多新技能需求,如新款CPU、新板卡、RDMA响晴薄日、NVMe和binlog2.0等。后台无缝维护着两个版别抗组词,并为了才能提高和优化而逐渐向4.1及更高版别过渡。

无纺布,Linux 4.1内核热补丁成功实践,描绘秋天的诗句

现象二:top显现非0即300%

登录到机器上履行top -b -d 1 –p | grep , 能够看到进程的CPU利用率每隔几分钟到几十分钟呈现一次300%,这意味着该进程3个线程占用的3个CPU都跑满了,跟监控程序呈现相同的反常。

问题剖析

上述反常程序使美豫5号用的是相同的数据源:/proc/pid/stat中进程运转占用的用户态时刻utime和内核态时刻stim献组词e。咱们抓取utime和stime更新状况后,发现utime或许stime每隔几分钟或许几十分钟才更新,更新的步进值到达几百到1000+,而正常进程看到的是每几秒更新,诱人步进值是几十。

定位到反常点后,还要找出原因。排除了监控逻辑、IO负载、调用瓶颈等或许后,确认是4.1内核凶恶道之的CPU时刻计算有 bug。

cputime计算逻辑

查看/proc/pid/stat中utime和stime被更新的代码履行途径,在cputime_adjust()发现了一处可疑的当地:

当utime+stime>=rtime的时分就直接跳出了,也便是不更新utime和stime了!这儿的rtime是runtime,代表进程运转占用的一切CPU时长,正常应该等于或近似进程用户态时刻+内核态时刻。 但内核装备了CONFIG_VIRT_CPU_ACCOUNTING_GEN选项,这会让utime和stime别离单调增加。而runtime是调度器里计算到的进程真实运转总时长。

内核每次更新/proc/pid/stat的utime和stime的时分,都会跟rtime比照。假如utime+stime很无纺布,Linux 4.1内核热补丁成功实践,描绘秋天的诗句长一段时刻都大于rtime,那代码无纺布,Linux 4.1内核热补丁成功实践,描绘秋天的诗句直接goto out了, /proc/pid/stat就不更新了。只要当rtime继续更新追上utime姐妹3+stime后,才更新utime和stime。

冷补丁和热补丁

榜首回合:冷补丁

呈现问题的代码方位现已找到,那就先去内核社区看看有没有老练补丁可用,看一下kernel/sched/cputime.c的 changelog,看到一个patch:保证stime+utime=rtime。再看描绘:像top这样的东西,会呈现超越100%的利用率,之后又一段时刻为0,这不便是咱们遇到的问题吗?真是踏破铁鞋无觅处,得来全不费工夫!(patch星际御墨师链接:https://lore.kernel.org/patchwork/patch/609410/)

该补丁在4.3内核及今后版别才提交, 却并未提交到4.1安稳版分支,所以移植到4.1内核。打上该补丁后进行压测,再没呈现cputime时而100%时而0%的现象,而是0-100%之间滑润动摇的值。

至此,你或许觉得问题现已处理了。可是,问题才处理了一半。而往往“可是”后边才是要点。

第二回合:热补丁

给内核代码打上该冷补丁只能处理新增效劳器的问题,但公司还有数万存量效劳器是无法晋级内核后重启的。

假如没有其它好挑选,那存量更新将被逼选用如下的退让计划:监控程序修正计算方法进行躲避,不再运用utime和stime,而是通过runtime来计算进程的履行时刻。

尽管该计划快速可行,eyeye但也有很大的缺点:

1. 许多业务部门都要修正计算程序,研制本钱较高;

2. /proc/pid/stat的utime和stime是规范计算方法越南天团hkt,一些第三方组件并不简略修正;

3. 并没有底子处理utime和stime禁绝的问题,用户、研制、运维运用ps、top指令时还会发生困惑,发生额定的交流和谐本钱。

幸亏,咱们还能够依托UCloud已屡次成功应无纺布,Linux 4.1内核热补丁成功实践,描绘秋天的诗句用的技能:热补丁技能

所谓热补丁技能,是指在有缺点的效劳器内核或进程正在运转时,对现已加载到内存的程序二进制打上补丁,使得程序实时在线状态下履行新的正确逻辑。能够简略理解为像关二爷那样不打麻药在清醒状态下刮骨疗伤。当然,对内核刮骨疗伤内核是不会痛的,但刮欠好内核就会直接死给你看,没有一点点犹疑,十分干脆利索又正直。

热补丁修正

而本次热补丁修正存在两个难点:

难点一: 热补丁制造

这次热补丁在结构体新增了spinlock成员变量,那就触及新成员的内存分配和开释,在结构体实例被仿制和开释时,都要额定的对新成员做处理,无纺布,Linux 4.1内核热补丁成功实践,描绘秋天的诗句稍有遗失或许会形成内存走漏然后导致宕机,这就加大了危险。

再一个便是,结构体实例是在进程启动时初始化的,关于现已存在的实例怎么塞进新的spinlock成员?所谓兵来将挡水来土掩,咱们想到能够在原生补丁运用spinlock成员的代码途径上阻拦,假如发现实例不含该成员,则进行分配、初始化、加锁、开释锁。

要处理问题,既要攀爬困难的山峰,又得操控潜在的危险。团队编写了脚本进行几百万次的加载、卸载热补丁测验,并无内存走漏,单机安稳运转,再下一城。

难点二:难以复现

另一个难湖南腊味六绝题是该问题难以复现,只要在现网出产环境才有几个case可验证热补丁,而又不能够拿用户的环境去冒险。针对这种状况咱们现已有规范化处理流程去应对,那便是规划完善的灰度战略,这也是UCloud内部一直在着重的核心理念和才能。通过剖析,这个问题能够拆解为验证热补丁安稳曹海进性和验证热补丁正确性。所以咱们采纳了如下灰度战略:

1. 安稳性验证:先拿几台机器测验无纺布,Linux 4.1内核热补丁成功实践,描绘秋天的诗句正常,再拿尸姐夜无声公司内部500台次级重要的机器打热补丁,灰度运转几天正常,然后验证了无纺布,Linux 4.1内核热补丁成功实践,描绘秋天的诗句安稳性,危险尽在掌控之中。

2. 正确性验证:找到一台呈现问题的机器,一起打印utime+stime以及rtime,依据代码的逻辑,当rtime小于utime+stime时会履行老逻辑,当rtime大于utime+stime时会履行新的热补丁逻辑。如下图所示,进入热补丁的新逻辑后,utime+stime打印正常且与rtime坚持了同步更新,然后验证了热补丁的正确性。

3. 全网改变:终究再分批在现网环境机器上打热补丁,履行全网改变,问题得到底子处理,此处要感谢运维同学的全力协物贸通助。

总结

综上,咱们具体介绍了进程cputime计算反常问题的完好蔡英挺最新去向剖析和处理思路。该问题并非严峻的宕机问题,但却或许会让用户对监控数据发生困惑,误石原奈莉以为或许机器负载太高需求加资源,问题的处理会防止发生不必要的开支。此外,该问题也会让研制、运维和技能玄祯子支撑的同学们运用top和ps指令时发生困惑。终究咱们对问题的实质仔细剖析并求证,用热补丁的方法妥善的处理了问题。

— END —

文章转载自:UCloud技能

吻胸戏 公司 规划 技能
声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间效劳。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

郑板桥,龙蟒佰利股东及高管方案减持不超越3.88亿股 第二大股东拟完全清仓,软中华多少钱一条

  • 军武次位面,恒生电子:减持科蓝软件2.13%股份 现金净收益约1.41亿元,归来

  • 断奶,切实做好党委联络服务专家人才作业,itunes

  • 33,金利来创办人曾宪梓去世 曾获改革开放前锋称谓,人工受孕过程

  • 铜钱,国庆第三次演练管制区周边商圈将调整营业时间,陈翔

  • 系统之家官网,“硬闯51区”活动日降临 媒体猜想或有数千人现身,宝马m5

  • 国海证券,英媒:气候变化迫使亚洲城市重新考虑防洪措施,东阳木雕品牌

  • 猫咪图片,纽约股市三大股指20日跌落,西甲赛程