3

我在网上搜索显示终止信号触发 cfprefsd 守护进程重新读取所有 plist 文件。看这里

当 killall cfprefsd 执行时,系统会冻结(显示可怕的沙滩球),直到它完全重新启动守护程序(这在我的系统上可能需要 1-5 分钟)。在另一台 Macbook(运行 10.9.4)上运行sudo killall cfprefsd.

这是我在日志中找到的。有什么想法会导致过度唤醒吗?我在哪里寻找导致此问题的问题?

13-3-'15 11:30:36.063 AM sudo[54484]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/killall cfprefsd
13-3-'15 11:31:28.000 AM kernel[0]: process who[54487] caught causing excessive wakeups. Observed wakeups rate (per sec): 864; Maximum permitted wakeups rate (per sec): 150; Observation period: 300 seconds; Task lifetime number of wakeups: 45001
13-3-'15 11:31:28.000 AM kernel[0]: process cfprefsd[54488] caught causing excessive wakeups. Observed wakeups rate (per sec): 864; Maximum permitted wakeups rate (per sec): 150; Observation period: 300 seconds; Task lifetime number of wakeups: 45001
13-3-'15 11:31:28.000 AM kernel[0]: process cfprefsd[54489] caught causing excessive wakeups. Observed wakeups rate (per sec): 864; Maximum permitted wakeups rate (per sec): 150; Observation period: 300 seconds; Task lifetime number of wakeups: 45001

PS 我怀疑一个或多个 plist 可能已损坏。我如何找出哪个?

2015 年 3 月 15 日更新:

kill -15 <pid>我已经使用(我有 2 个:root 和我自己)运行了几次 cfprefsd 重新启动。虽然过去两者似乎都被过度唤醒(同时被终止)所困扰,但在我的测试中,它似乎只适用于 root 用户。所以我可以比较来自 fs_usage 的记录中的时间戳:

系统冻结时:

13:33:00.015    exit                                                    0.000054    cfprefsd.2656406
13:33:05.007    open    F=17    (R_____)/usr/sbin/cfprefsd                              0.000035    appProtd.1953
13:33:56.982    posix_spawn     /usr/sbin/cfprefsd                                                        5 1.9758   W  launchd.2656433
13:34:48.866    stat64          /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation   0.000012    cfprefsd.2656433

没有任何冻结:

13:35:30.124    exit                                                    0.000076    cfprefsd.2656806
13:35:31.790    open    F=17    (R_____)/usr/sbin/cfprefsd                              0.000029    appProtd.1953               
13:35:31.791    posix_spawn     /usr/sbin/cfprefsd                              0.000728 W  launchd.2657306
13:35:31.791    stat64          /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation   0.000014    cfprefsd.2657306

launchd及时创建新的 cfprefsd 进程并启动该进程似乎存在问题,因为在此间隔期间系统冻结(注意在此间隔期间 CPU 几乎空闲)

4

2 回答 2

2

我不知道答案,但我可以提出几个故障排除建议:

  • 不要担心“过度唤醒”消息;AIUI 那些只是表示进程使用的内核服务比“通常”多,并不一定表示实际问题(12)。
  • 与其一次杀死所有 cfprefd 进程,不如尝试一次杀死一个,看看是哪个进程导致挂起。您可以使用ps -ax -Ouser | grep [c]fprefsd获取 cfprefsd 进程的列表,然后使用sudo kill <PID>.
  • 当您重新启动 cfprefsd 进程时,使用它sudo fs_usage | grep cfprefsd来查看它们正在访问的文件。查找在挂起之前、期间或之后访问的文件作为可能的嫌疑人。
  • plutil -lint您可以使用(例如)检查 .plist 文件的格式完整性sudo plutil -lint /Library/Preferences/*.plist。请注意,这仅检查属性列表格式的完整性,而不是存储在属性列表中的信息。此外,cfprefsd 通常会自行修复(/丢弃和替换)损坏的文件,所以我怀疑这会导致任何问题。
  • 检查 .plist 文件的权限、标志等,例如ls -leO@ /Library/Preferences. 例如,如果其中一个文件被锁定(“uchg”标志),或者您的用户偏好之一由其他用户拥有,则可能会导致奇怪的效果。
  • 您可以尝试删除可能有问题的文件,例如将它们移动到桌面(我会先备份整个相关的 Preferences 文件夹!),然后看看有什么效果。当你完成这个实验后,恢复 Preferences 文件夹的背面,这样你就不会忘记恢复你弄乱的任何文件。
于 2015-03-14T20:03:46.480 回答
0

事实证明,我运行的是适用于 Yosemite 的 McAfee VirusScan 9.7.0 版。降级到 9.6.0 版后,观察到的刷新 cfprefsd 的问题消失了。

于 2015-03-31T17:38:09.240 回答