MTHawkeye icon indicating copy to clipboard operation
MTHawkeye copied to clipboard

MTHNetworkObserver类ReceiveData里面appendData的时候,会报NSMallocException内存错误

Open qcliwei opened this issue 4 years ago • 3 comments

作者你好: 我这边监听直播推流请求的时候,发现会crash,看了崩溃日志,提示NSMallocException 错误

代码定位到

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data impl:(id)impl

函数是

[NSConcreteMutableData  appendbytes:length]
[NSConcreteMutableData  appendData:]

我看dataAccumulator逻辑是 didReceiveResponse 初始化 didReceiveData 里面拼接 didCompleteWithError 后面计算大小,移除

有没可能一开始dataAccumulator这个初始化的时候申请内存小了,然后后面不断拼返回的data,造成内存OOM了,直播的时候可能时间很长,导致数据越来越大,dataAccumulator这部分内存没有到didCompleteWithError就没有清除

qcliwei avatar Jul 15 '20 07:07 qcliwei

之前这个组件未考虑适配这个场景,方便的话能否提供个 MR? 可以加个开关,默认关闭 data 统计这部分功能;或者针对 data 统计做不同场景优化,只对小数据进行本地缓存

euanchan avatar Jul 18 '20 02:07 euanchan

MR是什么啊? 我这边去掉dataAccumulator拼接逻辑了,我在didCompleteWithError里直接拿Response的length了,不知道这样计算的Response的长度准不准

qcliwei avatar Jul 20 '20 08:07 qcliwei

Merge Request(Pull Request) https://github.com/meitu/MTHawkeye/blob/develop/Contributing.md

这个长度不是实际的长度,但可以作为粗略的参考

euanchan avatar Jul 24 '20 09:07 euanchan