macOS launchd CPU 占用过高问题排查记录

macOS launchd CPU 占用过高问题排查记录

问题现象

MacBook 出现以下异常:

  • launchd CPU 长时间占用 100%~300%
  • logd CPU 也持续较高
  • 风扇高速运转(Intel Mac)或机器发热(Apple Silicon)
  • 即使退出 Cursor,CPU 仍然没有下降

最初怀疑:

  • Cursor
  • VSCode
  • 网络代理
  • 某个后台进程不断拉起

最终证明以上均不是根因。


排查过程

1. 查看 launchd

css 复制代码
 top -o cpu

发现:

复制代码
 launchd
 logd

长期排在 CPU 前列。


2. 查看 launchd 的 syscall

使用

复制代码
 sudo fs_usage launchd

发现不停输出:

csharp 复制代码
 lstat64 private/etc/localtime
 sendto()
 lstat64 private/etc/localtime
 sendto()
 ...

说明:

launchd 一直在:

  • 查询时区
  • 向某个 socket 发消息
  • 写日志

形成死循环。


3. 查看 launchd 打开的文件

css 复制代码
 sudo lsof -p 1

发现:

c 复制代码
 FD 5
 ​
 /private/var/log/com.apple.xpc.launchd/launchd.log

说明 launchd 正在疯狂写日志。


4. 查看 launchd 日志

bash 复制代码
 sudo tail -100 \
 /private/var/log/com.apple.xpc.launchd/launchd.log

发现大量重复内容:

bash 复制代码
 (gui/501/com.sogou.SogouTaskManager)
 ​
 cannot spawn:
 service plist has the quarantine extended attribute

紧接着:

复制代码
 assertion failed

整个日志几乎全部由这一条组成。


根因分析

真正的问题不是 Cursor。

真正的问题是:

复制代码
 com.sogou.SogouTaskManager

即:

搜狗输入法后台服务。

launchd 不断尝试启动它:

erlang 复制代码
 launchd
         │
         ▼
 启动 SogouTaskManager
 ​
         │
         ▼
 启动失败
 ​
 原因:
 ​
 service plist has the quarantine extended attribute
 ​
         │
         ▼
 launchd 认为 KeepAlive 服务退出
 ​
         │
         ▼
 再次启动
 ​
         │
         ▼
 再次失败
 ​
 ...
 ​
 无限循环

于是:

复制代码
 launchd CPU ↑
 ​
 ↓
 ​
 不停写日志
 ​
 ↓
 ​
 logd CPU ↑
 ​
 ↓
 ​
 整个系统 CPU 很高

为什么会失败?

日志中的关键错误:

复制代码
 service plist has the quarantine extended attribute

说明:

LaunchAgent 或其对应文件带有:

复制代码
 com.apple.quarantine

扩展属性。

这是 macOS 的安全机制。

通常来源:

  • 浏览器下载
  • AirDrop
  • 第三方安装包
  • 手动复制 App
  • 升级后遗留文件

launchd 检测到:

此服务处于 quarantine 状态,不允许启动。

但是 LaunchAgent 又配置了:

ini 复制代码
 KeepAlive = true

于是:

复制代码
 失败
 ​
 ↓
 ​
 再次启动
 ​
 ↓
 ​
 再次失败
 ​
 ↓
 ​
 无限循环

为什么 logd 也会很高?

因为:

每次启动失败都会记录日志:

c 复制代码
launchd

↓

syslog

↓

logd

↓

写 launchd.log

所以:

复制代码
launchd CPU 高

↓

logd CPU 也高

这是结果,而不是原因。


Cursor 为什么不是根因?

虽然最开始怀疑 Cursor:

  • Cursor 经常启动大量后台进程
  • AI 插件可能频繁创建子进程

但是:

关闭 Cursor 后:

复制代码
launchd CPU

没有下降

并且 launchd 日志全部指向:

复制代码
com.sogou.SogouTaskManager

因此可以排除 Cursor。


后续排查建议

查看 LaunchAgent

bash 复制代码
launchctl print gui/501/com.sogou.SogouTaskManager

查找 plist

javascript 复制代码
find ~/Library /Library \
-name "*SogouTaskManager*.plist" 2>/dev/null

通常位于:

javascript 复制代码
~/Library/LaunchAgents/

或:

复制代码
/Library/LaunchAgents/

查看 quarantine 属性

javascript 复制代码
xattr -l \
~/Library/LaunchAgents/com.sogou.SogouTaskManager.plist

或者:

复制代码
xattr -l /Applications/SogouInput.app

如果看到:

复制代码
com.apple.quarantine

即可确认问题。


临时停止服务

bash 复制代码
launchctl bootout gui/501/com.sogou.SogouTaskManager

或者:

javascript 复制代码
launchctl unload \
~/Library/LaunchAgents/com.sogou.SogouTaskManager.plist

如果 CPU 立即下降,则进一步验证问题来源。


修复方式

方法一(推荐)

重新安装最新版搜狗输入法。

这样可以同时修复:

  • LaunchAgent
  • plist
  • 权限
  • 签名
  • quarantine 状态

这是最稳妥的方法。


方法二

移除 quarantine 属性:

复制代码
sudo xattr -dr \
com.apple.quarantine \
/Applications/SogouInput.app

或者:

javascript 复制代码
xattr -d \
com.apple.quarantine \
~/Library/LaunchAgents/com.sogou.SogouTaskManager.plist

仅建议在确认文件来源可信时使用。


排查思路总结

scss 复制代码
CPU 高
    │
    ▼
launchd 高
    │
    ▼
查看 syscall
(fs_usage)
    │
    ▼
不停 sendto()
不停 lstat()
    │
    ▼
查看 lsof
    │
    ▼
发现 launchd.log
    │
    ▼
查看日志
    │
    ▼
发现:

com.sogou.SogouTaskManager

cannot spawn

service plist has the quarantine extended attribute

    │
    ▼
确定:

LaunchAgent 无限重启

    │
    ▼
launchd CPU 高

    │
    ▼
logd CPU 高

结论

本次问题的直接原因是:

搜狗输入法(com.sogou.SogouTaskManager)对应的 LaunchAgent 无法启动,因为其 plist(或关联文件)带有 com.apple.quarantine 扩展属性。由于 LaunchAgent 配置了自动保活(KeepAlive),launchd 持续尝试重启该服务,导致陷入无限重启循环,从而造成 launchdlogd CPU 长时间占用过高。

Apple 的 launchd 会负责管理 LaunchAgent/LaunchDaemon,当配置了保活策略时,只要服务异常退出,就会持续尝试重新启动。若启动失败的原因(如 quarantine、签名、权限等)一直存在,就会形成重启风暴(restart storm)。相关行为与 launchd 的服务管理机制一致。

相关推荐
mashang12345678942 分钟前
mac安装SnailGitLite并配置Beyond Compare
前端·macos
深念Y1 天前
PVE 安装黑苹果并直通 Quadro P400
macos·ios·黑苹果·驱动·苹果·英伟达·p400
ACP广源盛139246256731 天前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#IX6024 PCIe2.0 交换芯片在轻量化 AI 服务中的机会与应用场景
大数据·数据库·人工智能·嵌入式硬件·macos·开源
sysinside1 天前
VMware Fusion 26H1u1 for Mac - 领先的免费桌面虚拟化软件
macos·fusion
夕小瑶1 天前
豆包工作」升级实测:多Agents并行,操作Mac电脑
macos
黄一一9112432 天前
跨平台视频图片压缩互转!离线视频压缩工具!Github开源轻松无损压缩视频!Win/Mac/Linux三端通用开源工具
windows·macos·音视频·开源软件
秋雨梧桐叶落莳2 天前
【iOS】从源码深入理解RunLoop机制
macos·ios·objective-c·cocoa·cocoapods·uikit
别走!万哥爱你2 天前
Mac访达中不显示iPad或iPhone怎么办?
macos·iphone·ipad
ACP广源盛139246256732 天前
M6/M5 Pro Mac mini 端侧 AI 爆发@ACP#YLB3118 存储扩展芯片在本地 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
guo_wen_qiang2 天前
mac中docker desktop服务端开启远程访问
运维·服务器·macos·docker