我已经使用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上做了这件事,因为我越来越绝望了,真的无法在带有诊断错误的模拟器上做任何工作。
到目前为止,一切似乎都很幸福。。。