搬了新工位让我的 MacBook Pro 发烫变慢

最近我发现我的 MacBook Pro 运行一会儿就会风扇狂转,摸了一下机器感觉很烫。

我寻思是不是我的开发任务太繁重了,以至于我的 Laptop 不堪重负,向我发出求救信号🆘

经验告诉我应该打开 macOS 系统的 「Activity Monitor」 来看下进程使用情况,看看到底是那个小机灵鬼在捣蛋。😜

image.png

一般来说我们找到占用最高的进程,杀掉这个进程,就可以释放 CPU 和内存的占用了,但是这一次,事情并没有按我们设定的剧情发展。我们看到占用最高的是一个叫做 「kernel_task」的进程,凭我多年 ~~搞基 ~~ 搞机的经验来判断,事情没有辣么简单。

我们需要先了解一下这个「kernel_task」是什么,其实这个进程有点类似 Windows 中的 「Idle Process」,就是说,在 CPU 运行过程中实际上是在时钟频率的周期下不断读取内存中的指令到内核中进行运算,为了保证系统中其他进程也能够分配到 CPU 时间,不至于撑的撑死饿的饿死,导致进程无响应,操作系统会使用时间分片来统一调度。同时为了保证任务空闲时 CPU 不至于满载运行,系统中通常会设计一个 「Idle Process」 来让 CPU 空跑。这个进程在 macOS 里面叫做 「kernel_task」。

那么为什么「kernel_task」占用有这么高呢,凭什么把 CPU 时间都给了它却不分配给明明很忙的我们呢?🤔

经过我持续几天的观察,我发现有的时候会出现这个情况,有的时候就不会出现。具体来说就是:电池电量剩余充足的情况下很少出现,通常在快没电了充电的时候就会比较卡。但是很奇怪的是,我以前也有过快没电了充电的经历,为啥之前没发现呢🤔

在排查各种变量的过程中突然想到:最近搬了新工位! share.jpg

你可能会惊讶,这TM有啥关系!

你还别说,真的有关系,听我来分析一哈!

(音响老师,音乐起🎵) ![image.png](../img/conan.png)
👇大家注意看这里👇

image.png

我在之前的工位,充电时一直用的是右侧的 USB-C 接口,搬到新工位的地方,由于桌面布局发生了改变,我插了左侧的接口充电和显示器。

也就是这个差别导致了我的 MacBook Pro 发热严重,系统使用 kernel_task 让 CPU 降低负荷,以减缓发热问题。但是也正因为这个动作让我们的系统变得卡顿了。

按着这个猜想我简单搜索了一下:

image.png

发现类似的问题也有人提出过,但是由于复现条件实在过于苛刻隐蔽,没能引起大规模讨论。

原来是因为 MacBook Pro 因为设计问题导致左侧的 USB-C 口的电源芯片和 HDMI 芯片发热,导致 CPU 的温度传感器感知热量为了保证 CPU 稳定运行才让 kernel_task 插入一些空任务来降低其他任务的优先级。不光是充电,使用不合适的显示器设备也会导致这个问题。

由此,问题原因终于找到了,这不禁让我想起两个类似的故事,这里和大家分享一下。

對香草口味過敏的車

有一天美国通用汽车公司的庞帝雅克(Pontiac)部门收到一封客户抱怨信,上面是这样写的∶“这是我为了同一件事第二次写信给你,我不会怪你们为什么没有回信给我,因为我也觉得这样别人会认为我疯了,但这的确是一个事实。”   “我们家有一个传统的习惯,就是我们每天在吃完晚餐后,都会以冰淇淋来当我们的饭后甜点。由于冰淇淋的口味很多,所以我们家每天在饭后才投票决定要吃哪一种口味,等大家决定后我就会开车去买。”   “但自从最近我买了一部新的庞帝雅克后,在我去买冰淇淋的这段路程问题就发生了。”   “你知道吗?每当我买的冰淇淋是香草口味时,我从店里出来车子就发不动。但如果我买的是其它的口味,车子发动就顺得很。我要让你知道,我对这件事情是非常认真的,尽管这个问题听起来很猪头。为什么这部庞帝雅克当我买了香草冰淇淋它就发不动,而我不管什么时候买其它口味的冰淇淋,它就一尾活龙?为什么?为什么?”   事实上庞帝雅克的总经理对这封信还真的心存怀疑,但他还是派了一位工程师去查看究竟。当工程师去找这位仁兄时,很惊讶的发现这封信是出之于一位事业成功、乐观、且受了高等教育的人。   工程师安排与这位仁兄的见面时间刚好是在用完晚餐的时间,两人于是一个箭步跃上车,往冰淇淋店开去。那个晚上投票结果是香草口味,当买好香草冰淇淋回到车上后,车子又发不动了。   这位工程师之后又依约来了三个晚上。   第一晚,巧克力冰淇淋,车子没事。   第二晚,草莓冰淇淋,车子也没事。   第三晚,香草冰淇淋,车子发不动。   这位思考有逻辑的工程师,到目前还是死不相信这位仁兄的车子对香草过敏。因此,他仍然不放弃继续安排相同的行程,希望能够将这个问题解决。工程师开始记下从头到现在所发生的种种详细资料,如时间、车子使用油的种类、车子开出及开回的时间……,根据资料显示他有了一个结论,这位仁兄买香草冰淇淋所花的时间比其它口味的要少。   为什么呢?原因是出在这家冰淇淋店的内部设置的问题。因为,香草冰淇淋是所有冰淇淋口味中最畅销的口味,店家为了让顾客每次都能很快的取拿,将香草口味特别分开陈列在单独的冰柜,并将冰柜放置在店的前端;至于其它口味则放置在距离收银台较远的后端。   现在,工程师所要知道的疑问是,为什么这部车会因为从熄火到重新激活的时间较短时就会发不动?原因很清楚,绝对不是因为香草冰淇淋的关系,工程师很快地由心中浮现出,答案应该是“蒸气锁”。因为当这位仁兄买其它口味时,由于时间较久,引擎有足够的时间散热,重新发动时就没有太大的问题。但是买香草口味时,由于花的时间较短,引擎太热以至于还无法让“蒸气琐”有足够的散热时间。

第二个故事:

image.png

https://github.com/fastai/fastai/issues/751#issuecomment-419319808

有时候问题的真正原因往往让你感到以外,就像一盒巧克力,你永远不知道下一颗是什么味道 …(bushi 就像上面的三个例子,看似不相关的行为背后竟有着千丝万缕的联系。而这些联系正无时无刻影响着我们的生活。

很多时候,很多问题并不是没有偶然、随机发生的,只是我们看不透而已。(上帝视角

最后,建议大家尽量使用右侧的 USB-C 口充电和连接显示器避免机器过热降频,祝大家工作愉快🎉