Xcode 在iOS模拟器上运行React Native app时,diagnosticd进程的CPU负载较高

Xcode 在iOS模拟器上运行React Native app时,diagnosticd进程的CPU负载较高,xcode,react-native,ios-simulator,cpu-usage,Xcode,React Native,Ios Simulator,Cpu Usage,我已经用React Native开发了好几年了,但以下行为最近才开始。在iOS模拟器上运行任何React Native应用程序(直接从Xcode或通过React Native run iOS)后,诊断过程会在几分钟后将CPU使用率缓慢增加到150%。我的笔记本电脑变得无法使用,因为这个过程也消耗了操作系统的所有文件句柄。谷歌搜索只会发现过度的日志记录,但要么我没有找到正确的位置,要么没有发生大量的日志记录 通过按下模拟器中的Home(主页)按钮关闭应用程序,立即停止高cpu负载 有人也经历过这种

我已经用React Native开发了好几年了,但以下行为最近才开始。在iOS模拟器上运行任何React Native应用程序(直接从Xcode或通过
React Native run iOS
)后,诊断过程会在几分钟后将CPU使用率缓慢增加到150%。我的笔记本电脑变得无法使用,因为这个过程也消耗了操作系统的所有文件句柄。谷歌搜索只会发现过度的日志记录,但要么我没有找到正确的位置,要么没有发生大量的日志记录

通过按下模拟器中的Home(主页)按钮关闭应用程序,立即停止高cpu负载

有人也经历过这种情况吗?我怎样才能找出这是什么原因


MacOS Catalina版本10.15.3、Xcode版本11.4、React版本16.9.0、React原生版本0.61.5、模拟器iPhone 11(iOS 13.4)

这与其说是解决方案,不如说是一种变通方法,但似乎将模拟器重置为出厂默认值可以暂时解决这个问题(至少在我的情况下)

看起来diagnosticd正在处理一些可能位于模拟器内存中的文件,因此随着时间的推移,这些文件可能会占用越来越多的cpu

无论如何,尝试进入模拟器菜单:
Hardware->擦除所有内容和设置
然后关闭模拟器并从XCode再次启动,以便在其上复制您的应用程序。

解决方法


我发现这很有用

还有一件事你可以尝试,这是一个非常激烈的措施,只有你自己承担风险

先试试这个

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.diagnosticd.plist
如果您收到关于系统保护(SIP)的消息

您可以尝试关闭SIP,然后再次运行该命令

这几乎可以保证Diagnostic再也不会运行了。。。不知道这意味着什么

阅读更多关于这两件事的信息

*免责声明,这可能不是干扰SIP的最安全的解决方案,但我在旧的2015 i5 macbook上这样做是因为我感到绝望,实际上无法在带有diagnosticd错误的模拟器上进行任何工作


到目前为止,一切似乎都很愉快……

我想我找到了解决办法。Xcode记录了许多行,其中包含:
Xcode nw\u连接\u获取连接\u套接字客户端称为nw\u连接\u获取连接\u套接字(位于未连接的nw\u连接上)
。这是在几个月前对Xcode进行了一些更新之后开始的。禁用日志记录已停止diagnosticd进程占用所有操作系统资源。我遵照这些指示:

基本上可以归结为向方案(运行)添加一个具有值
disable
的环境变量
OS\u ACTIVITY\u MODE


我仍然不知道记录日志的真正原因是什么。它看起来像是来自React Native的某种轮询。

终于找到了解决方案!我一直想知道为什么AppDelegate.m中的默认url不起作用。所以我开始关注这个问题。原来是我巨大的adblocking hosts文件造成的。恢复原始/etc/hosts文件解决了这两个问题!在模拟器上关闭应用程序并重新启动它似乎对我也有同样的效果,但作为一种解决方法,它只持续几分钟。我在其他一些正在运行的应用程序中也发现了一个错误,即操作系统没有文件描述符,因此我猜这不是模拟器上的一些大文件,而是随着时间的推移打开的大量小文件(可能由于cpu使用率高而没有关闭?)。我希望对操作系统有更多了解的人能够找出这些文件以及其中的内容。在这种情况下,你肯定有一个完全不同于我的问题。diagnosticd也消耗了CPU,但没有你那么多,重置了擦除模拟器修复了那个暂时的问题(我不知道有多久了,虽然已经两天了,问题还没有回来)。我对你的问题很感兴趣,因为它离我不远。当cpu使用率很高时,尝试猜测diagnosticd实际上在做什么是很有趣的(我不能在我的计算机上这样做,因为我不再有这个问题了)。使用该终端,您可以查看所有使用lsof的进程的打开文件列表,如果键入lsof | grep diagnosticd,您将看到diagnosticd打开的每个文件及其进程id pid。您还可以使用命令dtruss-p PID_Number查看所有系统调用。当cpu使用率较高时,您可以尝试一下吗?谢谢您的建议。我已经试过了,但对输出没有任何意义。我已经在聊天室里贴了,让我们继续在那里。我的聊天室好像被版主删除了。请让我知道如何联系你谢谢你的建议,我试过了。终止诊断过程没有帮助。它立即以同样高的cpu使用率返回。我还尝试了使用
/bin/launchctl list | grep SimDevice | awk'{print$3}'| xargs-I%s/bin/launchctl stop%s
的另一种方法。这肯定会扼杀diagnosticd进程,但不幸的是,也扼杀了它的完整模拟器。是的,launchctl最终也为我工作,但有点不同的方法,
sudo launchctl unload-w/System/Library/LaunchDaemons/com.apple.diagnosticd.plist
。但是,这可能需要您关闭SIP。。。祝你好运我找到了一个从Xcode禁用日志记录的解决方案。有关详细信息,请参见我自己的答案。谢谢你的帮助!谢谢你的建议。我以前尝试过重命名diagnosticd应用程序,但没有它,模拟器将无法启动。您确定它在被launchctl禁用时启动吗?那么从Xcode调试呢?这仍然有效吗?是的,对我来说,在
sudo launchctl unload-w/System/Library/LaunchDaemons/com.apple.diagnosticd.plist
我会注意到,似乎仍然有diagnostid出现,但它只有1
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.diagnosticd.plist