一台 Mac 发烫,usernoted 守护进程持续 99% CPU。删除 Timelines app 后问题解决。以下是完整调试过程。
开机 CPU 持续 99%,按内存排查无果,按 CPU 排序发现 usernoted 占用一个整核。killall 后两秒重启。使用 sample 获取堆栈,发现卡在 UNCalendarNotificationTrigger 的 week-of-year 日期计算无限循环。
怀疑是日历数据问题:移除 Google 日历、关闭日历通知、删除可疑日历、导出 .ics 检查 BYWEEKNO,全无效。原因为 zsh 内置 log 命令遮蔽了 /usr/bin/log,且命令后加了 2>/dev/null 吞掉报错,导致日志一直被误认为空。改用完整路径后立刻发现反复出现的 bundle ID com.glimsoft.Timelines,该 app 曾调度两条“重新互动”通知,但通知权限已被拒绝,形成死循环:计算触发时间 → 送达被拒 → 重新调度 → 再计算。
删除 /Applications/Timelines.app 后,CPU 从 8.0s/8s 降至 0.38s/8s。问题根源:Apple 的 Calendar.nextDate(matching:) 在无法满足组件时无限循环,已被向 Feedback Assistant 报告。
关键教训:不要过早忽略错误输出,警惕 shell 内置命令遮蔽,测量用累计时间而非快照。遇到 usernoted 飙 CPU,用 /usr/bin/log show 直接查看重复 bundle ID。
#开发者 #工具 #macOS #usernoted #调试 #Timelines #CPU
@DevToolboxHub
