1、HarmonyOSHiViewDFX-開發高可靠高性能應用的基石HarmonyOS HiViewDFX框架故障管理故障檢測缺陷檢測故障恢復觀測剖析信息導出HiDumper信息分析HiProfiler&HiPerf聯動調試HiDebugIDE調試調優設備質量分析應用質量分析DevEco Insight大數據分析運維運維開發開發z跟蹤HiTrace流水日志調用鏈事件框架系統事件應用事件事件日志OS其它子系統影音娛樂智慧出行移動辦公運動健康智能家居其他應用設備1如何開發一個高可靠的應用從錯誤中學到的東西,比從美德中學到的東西往往還要多VOC 可靠性差評占比 20%偶爾、經??ㄋ?!頻繁閃退!麻煩,非常
2、反感應用可靠性問題導致用戶體驗差開啟開啟XXXX應用,有應用,有卡頓現象,有時卡頓現象,有時候系統卡頓明候系統卡頓明顯,偶爾點擊顯,偶爾點擊應應用無反應用無反應XXXX應用經常應用經??ㄋ揽ㄋ婪浅7锤蟹浅7锤蠿XXX應用應用經常經常閃退閃退XXXX應用會閃退,應用會閃退,經常經常觸摸失效觸摸失效體驗還可以,就體驗還可以,就是應用程序經常是應用程序經常閃退閃退XXXX應用都出現過應用都出現過卡殼死機卡殼死機的情況的情況游戲會無緣無故游戲會無緣無故閃退閃退2應用可靠性問題開發定位困難UIUI線程耗時線程耗時消息風暴消息風暴系統服務阻塞系統服務阻塞編碼錯誤編碼錯誤并發錯誤并發錯誤異常處理不閉合異常處
3、理不閉合兼容性問題兼容性問題啟動失敗啟動失敗卡死卡死資源異常資源異常窗口異常窗口異??丶惓?丶惓:谄?、白屏黑屏、白屏閃退閃退對象泄露異常對象泄露異常nativenative堆泄漏堆泄漏線程泄漏線程泄漏類型多,信息不全,難以復現,定位時間長定位時間長功能失效功能失效卡死、無響應卡死、無響應根因復雜3可靠性問題定位常用方法FrameworkLibraries/RTAPPLinux KernelLog CollectorSignal CatcherSignal Queue 信號HackingCrash Dumper通知自行增加捕獲異常機制,與系統信息無法關聯4如何開發一個高可靠的應用檢測檢測輕量
4、輕量定位定位精準精準恢復恢復快速快速5HarmonyOS應用異常處理框架ServiceHiViewHiViewDFX API查詢訂閱恢復Ark RuntimeJS Error DetectorDFX ThreadAppRecoveryFault LoggerLeak DetectorFreeze DetectorAPPArkUIWatchdogJS Error全面檢測、精準記錄異常傳播路徑、日志精簡6應用異常日志查詢接口 FaultLog提供QuerySelfFaultLog接口以查詢自身故障:JS_CRASH JSJS程序故障類型程序故障類型 CPP_CRASH C+C+程序故障類型程序故障
5、類型 APP_FREEZE 應用程序卡死故障類型應用程序卡死故障類型querySelfFaultLog(faultType:FaultType,callback:AsyncCallbackArray):void接口適配接口適配7應用異常日志規格 Crash運 行 設 備信息Device info:MatePad ProError message:Cannot read property startAbility of undefinedSourceCode:context.startAbility(want).then()=Stacktrace:at startAbility(defaulta
6、bilitymanagerabilityManager.ts:89:5)at sendRecentKeyEvent(ohosxxxKeyCodeEvent.ts:105:5)at sendKeyEvent(ohosxxxKeyCodeEvent.ts:50:11)at onKeyTouch(etspageskeybutton.ets:86:5)崩 潰 故 障信息軟 件 版 本、模塊基礎信息應 用 基 礎信息Pid:11829Uid:10005Lifetime:0.000000sJs-Engine:arkpage:pages/index.js8Build info:OpenHarmony 3.2
7、.6.5Module name:com.ohos.systemuiVersion:1.0.0應用異常案例分析 Crash問題日志問題代碼Device info:MatePad ProBuild info:OpenHarmony 3.2.6.5Module name:com.ohos.systemuiVersion:1.0.0Pid:11829Uid:10005Lifetime:0.000000sJs-Engine:arkpage:pages/index.jsError message:Cannot read property startAbility of undefinedSourceCod
8、e:context.startAbility(want).then()=Stacktrace:at startAbility(defaultabilitymanagerabilityManager.ts:89:5)at sendRecentKeyEvent(ohosxxxKeyCodeEvent.ts:105:5)at sendKeyEvent(ohosxxxKeyCodeEvent.ts:50:11)at onKeyTouch(etspageskeybutton.ets:86:5)Old:static startAbility(want:Want,callback?:(error?:Busi
9、nessError)=void):void New:static startAbility(context:ServiceExtensionContext,want:Want,callback?:(error?:BusinessError)=void):void 原因分析:不同原因分析:不同haphap之間的之間的contextcontext相互引用,相互引用,由于啟動順序問題,會導致由于啟動順序問題,會導致contextcontext為為nullnull9應用異常日志規格 Native CrashDevice info:MatePad ProBuild info:OpenHarmony 3.
10、2.7.5Module name:com.huawei.hmsaVersion:1.0.0Pid:15942Uid:20010036Reason:SIGSEGVTid:15942 Name:com.huawei.hmsa#00 pc 000000000007ccbc/system/lib64/module/multimedia/libmedialibrary.z.so#01 pc 000000000001aef8/system/lib64/libace_napi.z.so(NativeAsyncWork:AsyncAfterWorkCallback(uv_work_s*,int)+508)#0
11、2 pc 0000000000011168/system/lib64/libuv.so(uv_work_done+188)#03 pc 00000000000147d4/system/lib64/libuv.so#04 pc 0000000000021f5c/system/lib64/libuv.so(uv_io_poll+820)#05 pc 0000000000014c1c/system/lib64/libuv.so(uv_run+372)#06 pc 0000000000025180/system/lib64/libruntime.z.so#07 pc 0000000000014504/
12、system/lib64/platformsdk/libeventhandler.z.so(OHOS:AppExecFwk:EventHandler:DistributeEvent(std:_1:unique_ptr const&)+484)Registers:r0:020bcd48 r1:02138cdc r2:00000000 r3:006e6f69r4:00000000 r5:02084aa8 r6:02084aa8 r7:00000006r8:02144cd0 r9:f17107db r10:da5087c8fp:0d002b70 ip:020b88ac sp:da508798 lr:
13、f7a589cc pc:f182debeMaps:b18000-b22000 r-p 00000000/system/bin/appspawnb22000-b35000 r-xp 00009000/system/bin/appspawnb35000-b37000 r-p 0001b000/system/bin/appspawnb37000-b38000 rw-p 0001c000/system/bin/appspawn設備/軟件模塊/進程信息故障直接原因崩潰線程調用棧崩潰線程寄存器內存映射表10應用異常案例分析 Native Crash問題代碼問題日志Fault thread Info:Tid
14、:15942 Name:com.huawei.hmsa#00 pc 00153ebe OHOS:Media:MediaLibraryRdbStore:Query(OHOS:Media:MediaLibraryCommand&,std:_h:vectorstd:_h:basic_stringchar,std:_h:char_traits,std:_h:allocator,std:_h:allocatorstd:_h:basic_stringchar,std:_h:char_traits,std:_h:allocator const&)at/././foundation/xxx/xxx/xxx/x
15、xxl/xxx/src/medialibrary_rdbstore.cpp:216#01 pc 00123613 OHOS:Media:MediaLibraryFileOperations:QueryFileOperation(OHOS:Media:MediaLibraryCommand&,std:_h:vectorstd:_h:basic_stringchar,std:_h:char_traits,std:_h:allocator,std:_h:allocatorstd:_h:basic_stringchar,std:_h:char_traits,std:_h:allocator )at/.
16、/././foundation/xxx/xxx/xxx/xxxl/xxx/xxxl/medialibrary_data_extension/src/medialibrary_file_operations.cpp:244原因分析:查詢數據時,智能指針并發操作未加原因分析:查詢數據時,智能指針并發操作未加鎖保護,存在結果集資源被釋放鎖保護,存在結果集資源被釋放if(sMediaDataHelper=nullptr)+sDataHelperMutex_.lock();sMediaDataHelper=abilityHelper;/medialibrary_rdbstore.cpp:216+sDat
17、aHelperMutex_.unlock();+sDataHelperMutex_.lock();obj-abilityHelper_=sMediaDataHelper;fetchRes.release();+sDataHelperMutex_.unlock();解析行號方法:OpenHarmonySdknative3.1.5.5llvmbinllvm-addr2line.exe-e path to libxxxx.so 00153ebe11應用異常日志 混合棧拼接J S F r am e0J S F r am e1J S F r am e2N a t ive 0 x 7 f5xx x6a78
18、N a tive 0 x 7 f5xx x6b7cN a tive 0 x 7 f8xx xedb4N a tive 0 x 7 f8xx x89d0N a tive 0 x 7 f7xx xa708N a tive 0 x 7 f6xx xaa79N a tive 0 x 7 f8xx x8a24N a tive 0 x 5 55xx xdf44N a t ive 0 x 7 f8xx x89d0N a t ive 0 x 7 f5xx x6b7cJ S F r am e0J S F r am e1J S F r am e2N a t ive 0 x 7 f6xx xaa79N a t iv
19、e 0 x 7 f8xx x8a24N a t ive 0 x 5 55xx xdf44N a t ive 0 x 7 f6xx xa000Mix StackNative StackVM StackUpper Bound frameLower Bound frame自動記錄邊界幀,跨語言調用棧輕量縫合12應用異常日志規格 混合棧拼接Tid:1630 comm:com.huawei.myapTid:1630 comm:com.huawei.myap#00 pc 00068778/system/lib/ld#00 pc 00068778/system/lib/ld-muslmusl-arm.so.
20、1arm.so.1#01 pc 000c968c/system/lib/ld#01 pc 000c968c/system/lib/ld-muslmusl-arm.so.1arm.so.1#02 pc 000d0564/system/lib/ld#02 pc 000d0564/system/lib/ld-muslmusl-arm.so.1(_clock_nanosleep_time64+260)arm.so.1(_clock_nanosleep_time64+260)#03 pc 000d0bc8/system/lib/ld#03 pc 000d0bc8/system/lib/ld-muslmu
21、sl-arm.so.1(_nanosleep_time64+28)arm.so.1(_nanosleep_time64+28)#04 pc 000d40f4/system/lib/ld#04 pc 000d40f4/system/lib/ld-muslmusl-arm.so.1(sleep+52)arm.so.1(sleep+52)#05 pc 0000aec1/system/lib/module/libhidebug.z.so(OHOS:HiviewDFX:DumpHeapData(napi_env_*,napi_callback_info_*)+60)#05 pc 0000aec1/sys
22、tem/lib/module/libhidebug.z.so(OHOS:HiviewDFX:DumpHeapData(napi_env_*,napi_callback_info_*)+60)#06 pc 0001c6df/system/lib/libace_napi_ark.z.so(ArkNativeFunction:NativeFunctionCallBack(panda:JsiRuntimeCallInfo*)+448)#06 pc 0001c6df/system/lib/libace_napi_ark.z.so(ArkNativeFunction:NativeFunctionCallB
23、ack(panda:JsiRuntimeCallInfo*)+448)at testCallBack(D:/code/JsNativeTest2/entry/build/default/intermediates/assets/default/at testCallBack(D:/code/JsNativeTest2/entry/build/default/intermediates/assets/default/ets/pages/index_.js:92:21ets/pages/index_.js:92:21)at anonymous(D:/code/JsNativeTest2/entry
24、/build/default/intermediates/assets/default/at anonymous(D:/code/JsNativeTest2/entry/build/default/intermediates/assets/default/ets/pages/index_.js:76:27ets/pages/index_.js:76:27)#07 pc 002ca355/system/lib/libark_jsruntime.so#07 pc 002ca355/system/lib/libark_jsruntime.so#08 pc 002071b9/system/lib/li
25、bark_jsruntime.so#08 pc 002071b9/system/lib/libark_jsruntime.so#09 pc 00205859/system/lib/libark_jsruntime.so#09 pc 00205859/system/lib/libark_jsruntime.so#10 pc 002ca97d/system/lib/libark_jsruntime.so(panda:FunctionRef:Call(panda:ecmascript:EcmaVM const*,#10 pc 002ca97d/system/lib/libark_jsruntime.
26、so(panda:FunctionRef:Call(panda:ecmascript:EcmaVM const*,panda:Local,panda:Local const*,int)+384)panda:Local,panda:Local const*,int)+384)#11 pc 0027d087/system/lib/libace_engine_declarative_ark.z.so#11 pc 0027d087/system/lib/libace_engine_declarative_ark.z.so#12 pc 000945c9/system/lib/libace_engine_
27、declarative_ark.z.so(OHOS:Ace:Framework:JsFunction:ExecuteJS(int,#12 pc 000945c9/system/lib/libace_engine_declarative_ark.z.so(OHOS:Ace:Framework:JsFunction:ExecuteJS(int,OHOS:Ace:Framework:JsiRef*)+120)OHOS:Ace:Framework:JsiRef*)+120)#13 pc 0008eb97/system/lib/libace_engine_declarative_ark.z.so#13
28、pc 0008eb97/system/lib/libace_engine_declarative_ark.z.so#14 pc 001b04c3/system/lib/libace_engine_declarative_ark.z.so#14 pc 001b04c3/system/lib/libace_engine_declarative_ark.z.so#15 pc 00216835/system/lib/libace_engine_declarative_ark.z.so#15 pc 00216835/system/lib/libace_engine_declarative_ark.z.s
29、o#16 pc 004fc8a3/system/lib/libace.z.so#16 pc 004fc8a3/system/lib/libace.z.so#17 pc 006928dd/system/lib/libace.z.so#17 pc 006928dd/system/lib/libace.z.so#18 pc 0000b78f#18 pc 0000b78f/system/lib/platformsdk/libeventhandler.z.so(OHOS:AppExecFwk:EventHandler:DistributeEvent(std:_h:unique_ptrOHOS:AppEx
30、/system/lib/platformsdk/libeventhandler.z.so(OHOS:AppExecFwk:EventHandler:DistributeEvent(std:_h:unique_ptr const&)+332)Fwk:InnerEvent,void(*)(OHOS:AppExecFwk:InnerEvent*)const&)+332)跨語言場景下,根據Native函數指針自動拼接同步調用棧13應用異常日志規格 AppFreezeDevice info:OpenHarmony 2.0 CanaryBuild info:OpenHarmony 3.2.7.3Modul
31、e name:com.ohos.stage9Version:1.0.0Pid:15847Uid:20010030Reason:THREAD_BLOCK_6Sappfreeze:com.ohos.stage9 THREAD_BLOCK_6S at 20at 20222208170938160817093816DOMAIN:AAFWKSTRINGID:THREAD_BLOCK_6STIMESTAMP:1502962696706PID:15847UID:20010030PACKAGE_NAME:com.ohos.stage9PROCESS_NAME:com.ohos.stage9MSG:App ma
32、in thread is not response!EventHandler dump begain curTime:20170817 09:38 AM Event runner(Thread name=,Thread ID=4155908900)is running Immediate priority event queue information:Total size of Immediate events:0 High priority event queue information:No.1:Event task name=mmi_event_handler.cpp(PostTask
33、:42)No.2:Event task name=mmi_event_handler.cpp(PostTask:42)No.3:Event task name=mmi_event_handler.cpp(PostTask:42).No.14:Event task name=mmi_event_handler.cpp(PostTask:42)Total size of High events:14 Low priority event queue information:No.1:Event task name=platform_task_runner_adapter.cc(PostDelaye
34、dTask:36)No.2:Event task name=vsync_time_out_task No.3:Event id=1 No.14:Event task name=platform_task_runner_adapter.cc(PostTask:26)Total size of Low events:7 Idle priority event queue information:OpenStacktraceCatcher-pid=15847packageName is com.ohos.stage9Result:0(no error)Tid:2005 comm:com.ohos.s
35、tage9#00 pc 001ea37e/system/lib/libark_jsruntime.so#01 pc 001e9965/system/lib/libark_jsruntime.so#02 pc 002a1793/system/lib/libark_jsruntime.so(panda:FunctionRef:Call(panda:ecmascript:EcmaVM const*,panda:Local,panda:Local const*,int)+354)#03 pc 00244483/system/lib/libace_engine_declarative_ark.z.so#
36、04 pc 0008352b/system/lib/libace_engine_declarative_ark.z.so(OHOS:Ace:Framework:JsFunction:ExecuteJS(int,OHOS:Ace:Framework:JsiRef*)+110)PeerBinderCatcher-pid=15847 layer_=0:BinderCatcher-20816:20816 to 23264:23285 code 1 wait:4.450935418 s15847:1584715847:15847 to 23264:23281 code 45b wait:34.43910
37、5210 s23267:23459 to 23264:23582 code bb8 wait:4.378110939 sPeerBinder Stacktrace PeerBinderCatcher start catcher stacktrace for pid:23264Timestamp:2022-09-24 20:30:39.000Pid:23264Uid:5523Process name:foundationTid:23264,Name:foundation#00 pc 000000000006cb3c/system/lib64/libc.so(syscall+28)#01 pc 0
38、000000000070dc4/system/lib64/libc.so(_futex_wait_ex(void volatile*,bool,int,bool,timespec const*)+144)#02 pc 00000000000cf558/system/lib64/libc.so(pthread_cond_wait+64)#03 pc 000000000001971c/system/lib64/platformsdk/libeventhandler.z.so 設備信息、軟件信息、軟件模塊名、軟件模塊版本、Pid、UidIPC耗時信息關聯進程調用棧故障根因故障線程調用棧主消息事件隊列
39、12345應用異常案例分析 AppFreeze線程棧問題日志DOMAIN:ACESTRINGID:UI_BLOCK_6STIMESTAMP:3461696135PID:8086UID:20010032PACKAGE_NAME:com.ohos.settingsPROCESS_NAME:com.ohos.settingsMSG:Blocked thread id=8086JSVM instance id=0 Page:pages/wifiPsd.jsStacktrace:SourceCode(if(err)at anonymous(/././applications_settings/produ
40、ct/phone/build/default/intermediates/assets/default/ets/pages/wifi_.js:872:13)*Process name:com.ohos.launcherTid:15847,Name:com.ohos.launch.Process name:foundationTid:23264,Name:foundation.*8086:8086 to 23264:23285 code 1 wait:9.450935418 s20809:20809 to 23264:23562 code 1 wait:4.422980210 s15847:15
41、847 to 23264:23281 code 45b wait:4.439105210 s23267:23459 to 23264:23582 code bb8 wait:4.378110939 s881:1637 to 603:711 code 5 wait:32455.424902609 sTid:23285,Name:2IPC_23285#00 pc 000000000006cb3c/system/lib64/libc.so(syscall+28)#01 pc 0000000000070dc4/system/lib64/libc.so(_futex_wait_ex(void volat
42、ile*,bool,int,bool,timespec const*)+144)#02 pc 00000000000cf558/system/lib64/libc.so(pthread_cond_wait+64)#03 pc 0000000000071674/system/lib64/libc+.so(std:_1:condition_variable:wait(std:_1:unique_lock&)+24)#04 pc 000000000001971c/system/lib64/platformsdk/libeventhandler.z.soTid:23582,Name:12IPC_235
43、82#00 pc 000000000006cb3c/system/lib64/libc.so(syscall+28)#01 pc 0000000000070dc4/system/lib64/libc.so(_futex_wait_ex(void volatile*,bool,int,bool,timespec const*)+144)#05 pc 000000000000e1d0/system/lib64/platformsdk/libeventhandler.z.so(OHOS:AppExecFwk:EventHandler:SendSyncEvent(std:_1:unique_ptr&,
44、OHOS:AppExecFwk:EventQueue:Priority)+332)#06 pc 00000000000c62dc/system/lib64/libwms.z.so(OHOS:Rosen:WindowManagerService:GetFocusWindowInfo(OHOS:sptr&)+132)#07 pc 000000000014a048/system/lib64/libabilityms.z.so(OHOS:AAFwk:AbilityManagerService:GetTopAbility(OHOS:sptr&)+36)#08 pc 000000000014bf68/sy
45、stem/lib64/libabilityms.z.so(OHOS:AAFwk:AbilityManagerService:GetTopAbility()+140)原因分析:原因分析:foundationfoundation內部死鎖內部死鎖14應用恢復框架15 統一保存和恢復機制,降低門檻 異常感知機制,實時通知應用 重啟恢復,保證恢復效果APPFoundationUI數據業務數據系統上下文文件網絡/定位界面棧KillJSCrashAppFreezeCppCrash異常檢測恢復套件狀態保存狀態恢復異常通知123123應用恢復API全集16接口說明ohos.application.appReco
46、very.saveAppState()主動保存Ability狀態ohos.application.appRecovery.restartApp()主動重啟應用ohos.application.Ability.onSaveState(reason,wantParam)框架回調保存Ability狀態ohos.appRecovery.enableAppRecovery(restartFlag,SaveOccasionFlag,SaveModeFlag)使能自動保存恢復應用ohos.application.appRecovery.restartFlag重啟的選項,包括:不限制重啟場景 應用卡死時不重啟
47、 應用NativeCrash時不重啟 應用JsError時不重啟ohos.application.appRecovery.SaveOccasionFlag持久化狀態時機的選項,包括:不自動保存 應用故障時保存 應用在onBackground時保存ohos.application.appRecovery.SaveModeFlag持久化狀態方式的選擇,包括 使用文件持久化 使用數據庫持久化 使用共享內存持久化17 ApplicationApplication恢復能力使能開啟恢復能力使能開啟 AbilityAbility數據保存(保存導航頁面和購物車貨品信息)數據保存(保存導航頁面和購物車貨品信息)
48、全面的異常檢測機制,開放完善ability數據保存接口。當應用異常時,自動加載恢復數據,直接恢復至原界面。應用異?;謴蛯嵗?2-117 AbilityAbility數據恢復數據恢復 pagepage頁面數據刷新頁面數據刷新應用異?;謴蛯嵗?2-2應用異?;謴托Ч?8如何開發一個高性能應用安迪給的,比爾就會拿走性能優化難點19系統機制和系統機制和探測埋點探測埋點資源分析負載分析系統性能是對整個系統的研究,包括了所有的硬件組件和整個軟件棧。-Brendan Gregg性能之巔:洞悉系統、企業與云計算HiviewDFX 調試調優架構介紹20開發人員提供輕量、可擴展的調優框架,基于HiViewDFX構
49、建基礎數據采集能力,為DevEco提供CPU、內存、耗時數據以及調試連接器。調試連接器DevEcoDevEco InsightInsight(PC側)HiperfHitraceDiskIOMEMCPUSchedHiProfiler數據分析展示數據傳輸數據采集調試連接器原理介紹21專為調試調優打造,提供數據多鏈路統一、輕量、跨平臺的調試連接器。命令類型命令類型命令參數命令參數行為行為list target空|-v|-a顯示設備列表start無服務后臺啟動-m無服務前臺啟動kill無服務退出-sip:port服務端口配置help/-h無幫助shell無進入shellXX執行系統命令fport/rp
50、orttcp端口轉發localabstractjdwpfile send/recv路徑文件收發installSome.hap調用bm安裝hilog無調用hilog命令工具rebootreason調用reboot接口bugreport無調用hidumper bugreport命令工具target mount無執行remount功能DevEco腳本/工具shell文件傳輸端口映射HDC HostUSB網絡串口HDC Daemon命令行工具調試服務調優數據高速通道#!HiTraceMeter TAGSHiTrace工具介紹22schedgraphicDevEco Insightipcabilitya
51、cecpufreqmemory離線、實時分析通道HiProfiler Trace插件perfprocfssysfstracefsHiTrace工具用于追蹤進程軌跡,進行程序性能分析,支持內核ftrace預置埋點和用戶態打點。HiPerf工具介紹23hiperf 是為開發人員提供的采樣調優分析工具,基于perf_events,可以采集CPU PMU,tracepoints,以及程序熱點函數信息。hiperf dump:Dump content of a perf data file,like perf.datahiperf list:List the supported event types.
52、hiperf record:Collect performance sample informationhiperf report:report sampling information from perf.dataformat filehiperf stat:Collect performance counter informationHiperf Infosschedcallstackshw-cpu-cycles離線和實時分析通道HiProfiler Hiperf 插件DevEco Insight24耗時數據采集耗時數據剖析應用程序在指定時間段內的CPU占用率、CPU核上運行的線程和線程調
53、用棧信息數據分類數據分類典型數據典型數據來源,怎么用來源,怎么用CPU占用率概覽某一時刻應用占CPU的百分比(應用所有線程占所有CPU核百分比之和)HiProfiler每個CPU核占用當前該CPU核上運行的線程,該CPU核的運行頻率。取自內核cpufreqtracepoint數據。HiTrace低開銷短時采集/HiProfiler長時間采集應用程序打點Trace數據用戶態打點的hitrace數據;應用進程組內各線程調度運行信息該線程運行在哪個CPU核上,此時CPU占用百分比。取自內核進程調度和cpuload tracepoint數據。線程函數棧Native函數棧;JS函數棧;用于分析選定時間段
54、內函數執行時間權重。Hiperf、jsprofilingCPU占用率概覽每個CPU核占用率當前應用每個線程的CPU占用率CPU占用率高的調用棧執行時間權重大的函數代碼行例如:同步耗時分析-NAPI調用中JS-CPP??p合跨語言統一時鐘采樣,native函數地址匹配cpuprofiling:JS棧獲取Js_stack_info.jsonJs_stack_info.jsonhiperf:cpp棧獲取napi(0 xc49fa231)napi(0 xc49fa231)napi(0 xc49fa231)napi(0 xc49fa231)Native:0 x00000000c49fa231.Native
55、:0 x00000000c49fa231napi(0 xc49fa231)napi(0 xc49fa231)napi(0 xc49fa231)napi(0 xc49fa231)Native:0 x00000000c49fa231.Native:0 x00000000c49fa231napi(0 xc49fa231)napi(0 xc49fa231)napi(0 xc49fa231)napi(0 xc49fa231)Native:0 x00000000c49fa231.Native:0 x00000000c49fa231monotonicmonotonic時間軸時間軸hidebug.getPss
56、hidebug.getPss()()hidebug.getSharedDirty()hidebug.getSharedDirty()hidebug.getPrivateDirty()hidebug.getPrivateDirty()2526Main threadMain threadWork thread1Work thread1queueexecutecompleteTime lineTime lineWork thread2Work thread2t1t2t3NAPI框架內置異步調用分析能力,統計各個階段時延,包含異步入隊、異步任務執行、異步回調處理。異步任務耗時-異步NAPI測量HiTr
57、ace API介紹及開發樣例27簡單方便的耗時分析接口??捎糜谕?、異步過程耗時打點。內存分析痛點28內存用了多少?是合理占用還是泄漏?內存觀測怎么找到內存占用的模塊?虛擬內存怎么分析?怎么做跨語言調用的內存分析?內存分析垂直理解應用業務和OS機制。各層內存打開逐層分析。HiDumper內存查看工具29HiDumper工具中提供了進程或者系統的內存查詢功能。HiDebug內存使用API介紹及樣例角標 15pt通過程序主動監控Native內存,及時了解內存壓力,調整業務或者進行狀態恢復。內存分析數據采集原理介紹30分配信息地址大小調用棧引用關系JS 對象引用關系樹Native內存分配樹虛擬內存分
58、配樹名字分配時間泳道圖、火焰圖JS HeapDumpMallocHookMmapHookVMA Name通過對Libc、虛擬機的分配器接口打點,實時抓取內存分配信息,實現對Native、Js堆內存分析、MMAP虛擬內存信息分析。DevEco Insight開發人員展望與演進IOIO、GPUGPU等調優工具等調優工具低延遲打點、免插樁低延遲打點、免插樁31調優大數據調優大數據應用多場景多實例應用多場景多實例自恢復自恢復謝謝歡迎關注HarmonyOS開發者微信公眾號掃碼參加HarmonyOS 線上開發者活動 HarmonyOS 第一課 ArkUI 入門訓練營 Codelabs 挑戰賽 HarmonyOS 體驗官征文