文档管理中心
我的
您当前正在浏览新版开发者文档中心,目录分类和层级有所调整。点击左侧当前文档分类名称前的“☰”图标,可切换文档分类。 了解新版目录
问题处理与运维开发与测试问题应用框架开发NDK开发任务并发调度(Function Flow Runtime)故障排查下载任务切换到后台下载中断

下载任务切换到后台下载中断

问题现象

下载任务正常启动,但是应用切换到后台后下载中断。

定位过程

根据HiLog日志,进行问题定位。

  1. 搜索关键字FOREGROUND、BACKGROUND,如果出现了类似日志且附近有“应用包名”的日志,则说明该应用此时进入了前台或后台,即故障发生点:
    收起
    自动换行
    深色代码主题
    复制
    1. I C01406/render_service/OHOS::RS: RSSurfaceRenderNodeDrawable::OnDraw name:BackgroundBlurView2, the number of total processedNodes: 2
    2. W C03301/'应用包名'/LIBUV: loop:394697872256, flag:complete, active reqs:100
    3. I C015B0/'应用包名'/NETSTACK: [http_exec.cpp:298] CURL_TRACE: type = 7, data = STATE: INIT => CONNECT handle f000
    4. I C01406/render_service/skia: RSHardwareThread::CommitAndReleaseLayers task execute, SurfaceName: [RCDBottomSurfaceNode7030861463553, RCDTopSurfaceNode7030861463553, DisplayNode]
    5. I C015B0/’应用包名’/NETSTACK: [http_exec.cpp:298] CURL_TRACE: type = 7, data = STATE: CONNECT => CONNECTING handle f000
    6. I C015B0/’应用包名’/NETSTACK: [http_exec.cpp:298] CURL_TRACE: type = 7, data = STATE: CONNECTING => PROTOCONNECT handle f000
    7. I C015B0/’应用包名’/NETSTACK: [http_exec.cpp:298] CURL_TRACE: type = 7, data = STATE: PROTOCONNECT => DO handle f000
    8. W C01719/hiview/ffrt: 73810:DevFFTSSchedClose:116 close ffts sched device fd:4
    9. I C015B0/’应用包名’/NETSTACK: [http_exec.cpp:298] CURL_TRACE: type = 7, data = STATE: DO => DID handle f000
    10. W C01719/useriam/ffrt: 24152:FFRTQosApplyForOther:244 tid 59557, Operation not permitted, ret:-1, eno:1
    11. I C015B0/’应用包名’/NETSTACK: [http_exec.cpp:298] CURL_TRACE: type = 7, data = STATE: DID => PERFORMING handle f000
    12. E C01719/hiview/ffrt: 73811:DevFFTSOpen:73 open ffts device error, fd= -1, errno=12.
  2. 在故障位置附近发现报错信息为:
    收起
    自动换行
    深色代码主题
    复制
    1. W C01719/hiview/ffrt: 73810:DevFFTSSchedClose:116 close ffts sched device fd:4 code:1001
    2. W C01719/useriam/ffrt: 24152:FFRTQosApplyForOther:244 tid 59557, Operation not permitted, ret:-1, eno:1
    3. E C01719/hiview/ffrt: 73811:DevFFTSOpen:73 open ffts device error, fd= -1, errno=12.

    日志显示:

    • 尝试关闭FFRT设备时失败(fd:4)。
    • FFRTQosApplyForOther报错“Operation not permitted”。
    • DevFFTSOpen失败,返回errno=12(ENOMEM,内存不足)。
  3. 且故障点附近日志显示LiveEventBus频繁调用,多个下载任务同时进行。
    收起
    自动换行
    深色代码主题
    复制
    1. -------> LiveEventBusCore get <------
    2. [LiveEventBus] postValue:[object Object] observer:[object Object] owner:3
    3. -------> LiveEventBusCore get <------
    4. [LiveEventBus] message received: [object Object]
    5. -------> LiveEventBusCore get <------
    6. [LiveEventBus] postValue:[object Object] observer:[object Object] owner:3
    7. -------> LiveEventBusCore get <------
    8. [LiveEventBus] message received: [object Object]
    9. -------> LiveEventBusCore get <------
    10. [LiveEventBus] postValue:[object Object] observer:[object Object] owner:3
    11. -------> LiveEventBusCore get <------
    12. [LiveEventBus] message received: [object Object]
    13. -------> LiveEventBusCore get <------
    14. [LiveEventBus] postValue:[object Object] observer:[object Object] owner:3

分析结论

应用未考虑高负载下的处理逻辑进行优化,高并发下载导致手机内存耗尽,下载线程崩溃暂停。

修改建议

对高并发下的下载场景进行优化,使用TaskPool提供的多任务优先级调度机制,根据业务需求合理设置优先级。参考应用并发设计。