1 故障现象
系统比较空闲时(cpu占用率为20%左右),系统死循环检测机制检测到存在任务处于死循环状态。但是,系统明显比较空闲,也就是说系统死循环检测机制发生了误判。为了分析这个故障,首先要了解死循环检测机制的工作原理。
2 死循环检测机制
每隔一分钟,统计一次系统中所有任务的cpu占用率,如果一分钟之内统计到某个任务cpu占有率超过给定的阈值,该条件作为该任务作为死循环发生的一个必要条件。另外,如果比该任务优先级低的任务没有得到调度,并且系统的消息队列没有发生变化,只有这三个条件同时成立时,才认为发生了死循环。而且,需要重复命中两次才可以确认死循环的发生。
这种实现机制存在的缺陷是优先级很低的任务发生死循环的时候,不能够检测到。这是由于发生死循环的任务优先级比较低,总是被高优先级的任务打断,导致发生死循环的任务执行的时间没有达到阈值或者只有其中的一次达到阈值之后,第二次进行重复命中确认的时候,运行时间又没有达到阈值,最终系统认为该任务没有发生死循环。虽然死循环检测机制存在这种缺陷,但是只要确定一个最低优先级死循环能够被检测到,比这个优先级更低的任务即使发生了死循环,也不会影响系统的运行。
根据目前的故障现象,检测到了不存在的死循环,作为死循环的必要条件,任务执行的时间必须达到设定的阈值。也就是说很可能是任务cpu占有率统计出了问题。
3 统计任务的cpu占有率
死循环检测机制统计任务cpu占有率的数据源是/proc/statp文件。而/proc/statp通过读取task_struct的sum_exec_runtime值来计算每个任务的