在iOS模拟器上运行React Native应用程序时,诊断进程的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 Native版本0.61.5,模拟器iPhone 11(iOS 13.4)

我想我找到了解决方案。Xcode记录了许多行,其中包含:xcode nw_connection_get_connected_socket Client called nw_connection_get_connected_socket on unconnected nw_connection。这是在几个月前Xcode的一些更新之后开始的。禁用日志记录已阻止诊断进程占用所有操作系统资源。我遵循了以下说明:隐藏奇怪的不需要的Xcode日志

基本上可以归结为将值为disable的环境变量OS_ACTIVITY_MODE添加到Scheme(Run)中。

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

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

看起来diagnosticd正在处理一些可能位于模拟器内部内存上的文件,所以随着文件的增长,它可能需要越来越多的cpu?

无论如何,尝试转到模拟器菜单:Hardware -> Erase All Content and Settings然后关闭模拟器并从XCode再次启动它,以便在上面复制您的应用程序。

Xcode 9.3 Playground的解决方法-诊断,

kill $(ps -ef | grep Xcode.app | egrep "diagnosticd|homed" | awk '{ print $2 }')

我发现这是有用的

终于找到了解决方案!我一直想知道为什么AppDelegate.m中的默认url不起作用。所以我开始关注这一点。事实证明,我巨大的广告屏蔽主机文件是造成这种情况的原因。恢复原始/etc/hosts文件解决了这两个问题!

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

先试试这个,

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.diagnosticd.plist

如果你收到一条关于系统保护(SIP)的消息,

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

这几乎可以保证诊断程序再也不会运行了。。。但不知道这意味着什么。。。

在这里阅读更多关于这两件事,

https://makandracards.com/dev/16439-disable-daemons-services-in-mac-os-x

https://www.imore.com/how-turn-system-integrity-protection-macos

*免责声明,这可能不是干扰SIP的最安全的解决方案,但我在2015年的旧i5 macbook上做了这件事,因为我越来越绝望了,真的无法在带有诊断错误的模拟器上做任何工作。

到目前为止,一切似乎都很幸福。。。

最新更新