iOS - 错误消息“设备上没有剩余空间”

问题描述

我们突然遇到一个似乎与 iOS 14 相关的问题,因为我们在之前的版本中没有出现这些错误。

在应用启动时,我们对不同的网络服务进行了大量网络请求。在用户完全登录之前,总共需要 158 个 GET、POST 和 PUT 请求。在此之前,该应用程序使用 260MB 的内存。当用户切换到不同的帐户时,登录过程将再次启动,并发出另外 158 个请求。现在,如果用户再次决定使用新帐户登录,则登录过程将再次开始。但这一次,网络请求随机开始取消,并显示以下错误消息:

Error Domain=NSPOSIXErrorDomain Code=28 "No space left on device" UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <EA2DAE7D-F7AD-4979-8215-E716163FA725>.<1>,_kCFStreamErrorDomainKey=1,_NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <EA2DAE7D-F7AD-4979-8215-E716163FA725>.<1>"),_kCFStreamErrorCodeKey=28} 

因此,在两分钟和大约 400 - 500 个 HTTP 请求的时间范围内,网络层由于内存空间不足而开始取消这些请求。虽然它可以用掉 3GB。

应用网络逻辑在我们开始遇到此类错误之前和之后都没有太大变化。我们也只使用一个 SessionManager 实例。在我看来,网络堆栈似乎会被请求数量淹没,因此开始取消它们。也许iOS 14在这方面变得更加严格?有没有其他人可能遇到过类似的问题?

我们在基本网络层使用 AFNetworking。

非常感谢任何帮助。

解决方法

经过一段时间的调查,结果证明它是我们用于调试目的的库。这个库,DBDebugToolkit,带有我们默认开启的网络记录器功能。在高流量的情况下,网络记录器会迅速增加内存使用量,直到我们的请求被取消。现在它默认关闭,但可以在我们的调试菜单中打开。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...