From 7660669e520e3c15d1ed5c033a9a8bc75f4051ed Mon Sep 17 00:00:00 2001 From: njupthan Date: Fri, 28 Jan 2022 19:07:20 +0800 Subject: [PATCH 1/2] AMS service thread stuck detection Signed-off-by: njupthan --- services/abilitymgr/BUILD.gn | 2 ++ .../abilitymgr/include/ability_manager_service.h | 2 +- .../include/ams_configuration_parameter.h | 6 ++++++ .../abilitymgr/resource/ams_service_config.json | 3 ++- services/abilitymgr/src/ability_manager_service.cpp | 13 ++++++++++--- services/abilitymgr/src/ability_stack_manager.cpp | 6 ++++-- .../abilitymgr/src/ams_configuration_parameter.cpp | 7 +++++++ services/abilitymgr/src/mission_list_manager.cpp | 3 ++- services/abilitymgr/test/BUILD.gn | 2 ++ .../moduletest/ability_mgr_service_test/BUILD.gn | 2 ++ .../test/moduletest/ability_record_test/BUILD.gn | 2 ++ .../test/moduletest/ability_stack_test/BUILD.gn | 2 ++ .../moduletest/panding_want_manager_test/BUILD.gn | 2 ++ 13 files changed, 44 insertions(+), 8 deletions(-) diff --git a/services/abilitymgr/BUILD.gn b/services/abilitymgr/BUILD.gn index 51d603d90e4..a849059eb89 100644 --- a/services/abilitymgr/BUILD.gn +++ b/services/abilitymgr/BUILD.gn @@ -63,6 +63,7 @@ config("abilityms_config") { "//base/account/os_account/frameworks/common/database/include", "//base/account/os_account/frameworks/common/log/include", "//base/account/os_account/interfaces/innerkits/osaccount/native/include", + "//base/hiviewdfx/hicollie/interfaces/native/innerkits/include", ] cflags = [] if (target_cpu == "arm") { @@ -106,6 +107,7 @@ ohos_shared_library("abilityms") { "ces_standard:cesfwk_innerkits", "device_manager_base:devicemanagersdk", "dsoftbus_standard:softbus_client", + "hicollie_native:libhicollie", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "resmgr_standard:global_resmgr", diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 41daad5541a..a2c40fc3d19 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -714,7 +714,7 @@ public: void RestartAbility(const sptr &token); void NotifyBmsAbilityLifeStatus( - const std::string &bundleName, const std::string &abilityName, const int64_t launchTime); + const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid); int StartAbilityInner( const Want &want, diff --git a/services/abilitymgr/include/ams_configuration_parameter.h b/services/abilitymgr/include/ams_configuration_parameter.h index 1e9f44038a0..c2226e0748c 100644 --- a/services/abilitymgr/include/ams_configuration_parameter.h +++ b/services/abilitymgr/include/ams_configuration_parameter.h @@ -34,6 +34,7 @@ const std::string STARTUP_NAVIGATION_BAR {"startup_system_ui_navigation_bar"}; const std::string STARTUP_PHONE_SERVICE {"startup_phone_service"}; const std::string MISSION_SAVE_TIME {"mission_save_time"}; const std::string APP_NOT_RESPONSE_PROCESS_TIMEOUT_TIME {"app_not_response_process_timeout_time"}; +const std::string AMS_TIMEOUT_TIME {"ams_timeout_time"}; const std::string SYSTEM_CONFIGURATION {"system_configuration"}; const std::string SYSTEM_ORIENTATION {"system_orientation"}; const std::string STARTUP_CONTACTS {"startup_contacts"}; @@ -118,6 +119,10 @@ public: * get the application not response process timeout time. */ int GetANRTimeOutTime() const; + /** + * get ability manager service not response process timeout time. + */ + int GetAMSTimeOutTime() const; enum { READ_OK = 0, READ_FAIL = 1, READ_JSON_FAIL = 2 }; @@ -145,6 +150,7 @@ private: std::string orientation_ {""}; int missionSaveTime_ {12 * 60 * 60 * 1000}; int anrTime_ {5000}; + int amsTime_ {5000}; std::map memThreshold_; }; } // namespace AAFwk diff --git a/services/abilitymgr/resource/ams_service_config.json b/services/abilitymgr/resource/ams_service_config.json index 29ae3078424..a557159ea95 100644 --- a/services/abilitymgr/resource/ams_service_config.json +++ b/services/abilitymgr/resource/ams_service_config.json @@ -10,7 +10,8 @@ "mission_save_time" : 43200000, "root_launcher_restart_max":15, "use_new_mission":true, - "app_not_response_process_timeout_time" : 5000 + "app_not_response_process_timeout_time" : 5000, + "ams_timeout_time" : 5000 }, "memorythreshold":{ "home_application": "20" diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 1d6996c6723..402d038c6a0 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -46,6 +46,7 @@ #include "os_account_manager.h" #include "png.h" #include "ui_service_mgr_client.h" +#include "xcollie/watchdog.h" using OHOS::AppExecFwk::ElementName; @@ -184,6 +185,11 @@ bool AbilityManagerService::Init() kernalAbilityManager_ = std::make_shared(0); CHECK_POINTER_RETURN_BOOL(kernalAbilityManager_); + int amsTimeOut = amsConfigResolver_->GetAMSTimeOutTime(); + if (HiviewDFX::Watchdog::GetInstance().AddThread("AMSWatchdog", handler_, amsTimeOut) != 0) { + HILOG_ERROR("HiviewDFX::Watchdog::GetInstance AddThread Fail"); + } + auto startLauncherAbilityTask = [aams = shared_from_this()]() { aams->StartSystemApplication(); }; handler_->PostTask(startLauncherAbilityTask, "startLauncherAbility"); auto creatWhiteListTask = [aams = shared_from_this()]() { @@ -3145,11 +3151,12 @@ void AbilityManagerService::RestartAbility(const sptr &token) } void AbilityManagerService::NotifyBmsAbilityLifeStatus( - const std::string &bundleName, const std::string &abilityName, const int64_t launchTime) -{ + const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) +{ auto bundleManager = GetBundleManager(); CHECK_POINTER(bundleManager); - bundleManager->NotifyAbilityLifeStatus(bundleName, abilityName, launchTime); + HILOG_INFO("NotifyBmsAbilityLifeStatus is called, uid :%{public}d", uid); + bundleManager->NotifyAbilityLifeStatus(bundleName, abilityName, launchTime, uid); } void AbilityManagerService::StartSystemApplication() diff --git a/services/abilitymgr/src/ability_stack_manager.cpp b/services/abilitymgr/src/ability_stack_manager.cpp index ed557182d1e..2ffbcc83a89 100644 --- a/services/abilitymgr/src/ability_stack_manager.cpp +++ b/services/abilitymgr/src/ability_stack_manager.cpp @@ -1500,7 +1500,8 @@ void AbilityStackManager::CompleteActive(const std::shared_ptr &a DelayedSingleton::GetInstance()->NotifyBmsAbilityLifeStatus( abilityRecord->GetAbilityInfo().bundleName, abilityRecord->GetAbilityInfo().name, - AbilityUtil::UTCTimeSeconds()); + AbilityUtil::UTCTimeSeconds(), + abilityRecord->GetApplicationInfo().uid); #if BINDER_IPC_32BIT HILOG_INFO("notify bms ability life status, bundle name:%{public}s, ability name:%{public}s, time:%{public}lld", abilityRecord->GetAbilityInfo().bundleName.c_str(), @@ -4794,7 +4795,8 @@ void AbilityStackManager::CompleteForegroundNew(const std::shared_ptr::GetInstance()->NotifyBmsAbilityLifeStatus( abilityRecord->GetAbilityInfo().bundleName, abilityRecord->GetAbilityInfo().name, - AbilityUtil::UTCTimeSeconds()); + AbilityUtil::UTCTimeSeconds(), + abilityRecord->GetApplicationInfo().uid); #if BINDER_IPC_32BIT HILOG_INFO("notify bms ability life status, bundle name:%{public}s, ability name:%{public}s, time:%{public}lld", abilityRecord->GetAbilityInfo().bundleName.c_str(), diff --git a/services/abilitymgr/src/ams_configuration_parameter.cpp b/services/abilitymgr/src/ams_configuration_parameter.cpp index cad75f5cd8b..49d1ef168c4 100644 --- a/services/abilitymgr/src/ams_configuration_parameter.cpp +++ b/services/abilitymgr/src/ams_configuration_parameter.cpp @@ -87,6 +87,11 @@ int AmsConfigurationParameter::GetANRTimeOutTime() const return anrTime_; } +int AmsConfigurationParameter::GetAMSTimeOutTime() const +{ + return amsTime_; +} + int AmsConfigurationParameter::GetMaxRestartNum() const { return maxRestartNum_; @@ -154,6 +159,8 @@ int AmsConfigurationParameter::LoadAppConfigurationForStartUpService(nlohmann::j missionSaveTime_ = Object.at(AmsConfig::SERVICE_ITEM_AMS).at(AmsConfig::MISSION_SAVE_TIME).get(); anrTime_ = Object.at(AmsConfig::SERVICE_ITEM_AMS).at(AmsConfig::APP_NOT_RESPONSE_PROCESS_TIMEOUT_TIME).get(); + amsTime_ = + Object.at(AmsConfig::SERVICE_ITEM_AMS).at(AmsConfig::AMS_TIMEOUT_TIME).get(); if (Object.at(AmsConfig::SERVICE_ITEM_AMS).contains(AmsConfig::USE_NEW_MISSION)) { useNewMission_ = Object.at(AmsConfig::SERVICE_ITEM_AMS).at(AmsConfig::USE_NEW_MISSION).get(); } diff --git a/services/abilitymgr/src/mission_list_manager.cpp b/services/abilitymgr/src/mission_list_manager.cpp index 0a1a0451991..a9d7ec9fa17 100644 --- a/services/abilitymgr/src/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission_list_manager.cpp @@ -715,7 +715,8 @@ void MissionListManager::CompleteForegroundNew(const std::shared_ptr::GetInstance()->NotifyBmsAbilityLifeStatus( abilityRecord->GetAbilityInfo().bundleName, abilityRecord->GetAbilityInfo().name, - AbilityUtil::UTCTimeSeconds()); + AbilityUtil::UTCTimeSeconds(), + abilityRecord->GetApplicationInfo().uid); #if BINDER_IPC_32BIT HILOG_INFO("notify bms ability life status, bundle name:%{public}s, ability name:%{public}s, time:%{public}lld", abilityRecord->GetAbilityInfo().bundleName.c_str(), diff --git a/services/abilitymgr/test/BUILD.gn b/services/abilitymgr/test/BUILD.gn index a4ab83b8837..f131c140d4d 100644 --- a/services/abilitymgr/test/BUILD.gn +++ b/services/abilitymgr/test/BUILD.gn @@ -107,6 +107,7 @@ ohos_source_set("abilityms_test_source") { "//base/account/os_account/frameworks/common/database/include", "//base/account/os_account/frameworks/common/log/include", "//base/account/os_account/interfaces/innerkits/osaccount/native/include", + "//base/hiviewdfx/hicollie/interfaces/native/innerkits/include/xcollie", ] external_dependent_files = [ @@ -148,6 +149,7 @@ ohos_source_set("abilityms_test_source") { "ces_standard:cesfwk_core", "ces_standard:cesfwk_innerkits", "dsoftbus_standard:softbus_client", + "hicollie_native:libhicollie", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "native_appdatamgr:native_appdatafwk", diff --git a/services/test/moduletest/ability_mgr_service_test/BUILD.gn b/services/test/moduletest/ability_mgr_service_test/BUILD.gn index 5f968219b0b..beb1a9a0f44 100644 --- a/services/test/moduletest/ability_mgr_service_test/BUILD.gn +++ b/services/test/moduletest/ability_mgr_service_test/BUILD.gn @@ -24,6 +24,7 @@ ohos_moduletest("ability_mgr_module_test") { "//third_party/jsoncpp/include", "//foundation/aafwk/standard/frameworks/kits/ability/native/include/distributed_ability_runtime", "//foundation/aafwk/standard/interfaces/innerkits/dataobs_manager/include", + "//base/hiviewdfx/hicollie/interfaces/native/innerkits/include/xcollie", ] sources = [ "ability_mgr_module_test.cpp" ] @@ -113,6 +114,7 @@ ohos_moduletest("ability_mgr_module_test") { "ces_standard:cesfwk_core", "ces_standard:cesfwk_innerkits", "dsoftbus_standard:softbus_client", + "hicollie_native:libhicollie", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "native_appdatamgr:native_appdatafwk", diff --git a/services/test/moduletest/ability_record_test/BUILD.gn b/services/test/moduletest/ability_record_test/BUILD.gn index b07710eba51..d4769d67f21 100644 --- a/services/test/moduletest/ability_record_test/BUILD.gn +++ b/services/test/moduletest/ability_record_test/BUILD.gn @@ -26,6 +26,7 @@ ohos_moduletest("AbilityRecordModuleTest") { "//third_party/jsoncpp/include", "//foundation/aafwk/standard/frameworks/kits/ability/native/include/distributed_ability_runtime", "//foundation/aafwk/standard/interfaces/innerkits/dataobs_manager/include", + "//base/hiviewdfx/hicollie/interfaces/native/innerkits/include/xcollie", ] sources = [ @@ -116,6 +117,7 @@ ohos_moduletest("AbilityRecordModuleTest") { "ces_standard:cesfwk_core", "ces_standard:cesfwk_innerkits", "dsoftbus_standard:softbus_client", + "hicollie_native:libhicollie", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "native_appdatamgr:native_appdatafwk", diff --git a/services/test/moduletest/ability_stack_test/BUILD.gn b/services/test/moduletest/ability_stack_test/BUILD.gn index 6bf2d95cf3a..3a0d5cb3cfa 100644 --- a/services/test/moduletest/ability_stack_test/BUILD.gn +++ b/services/test/moduletest/ability_stack_test/BUILD.gn @@ -24,6 +24,7 @@ ohos_moduletest("ability_stack_module_test") { "//third_party/jsoncpp/include", "//foundation/aafwk/standard/frameworks/kits/ability/native/include/distributed_ability_runtime", "//foundation/aafwk/standard/interfaces/innerkits/dataobs_manager/include", + "//base/hiviewdfx/hicollie/interfaces/native/innerkits/include/xcollie", ] sources = [ "ability_stack_module_test.cpp" ] @@ -114,6 +115,7 @@ ohos_moduletest("ability_stack_module_test") { "ces_standard:cesfwk_core", "ces_standard:cesfwk_innerkits", "dsoftbus_standard:softbus_client", + "hicollie_native:libhicollie", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "native_appdatamgr:native_appdatafwk", diff --git a/services/test/moduletest/panding_want_manager_test/BUILD.gn b/services/test/moduletest/panding_want_manager_test/BUILD.gn index 54cc02d0b9e..db815d1f407 100755 --- a/services/test/moduletest/panding_want_manager_test/BUILD.gn +++ b/services/test/moduletest/panding_want_manager_test/BUILD.gn @@ -28,6 +28,7 @@ ohos_moduletest("PandingWantMgrTest") { "//foundation/distributedschedule/samgr/interfaces/innerkits/samgr_proxy/include", "//foundation/distributedschedule/samgr/adapter/interfaces/innerkits/include/", "//third_party/jsoncpp/include", + "//base/hiviewdfx/hicollie/interfaces/native/innerkits/include/xcollie", ] sources = abilityms_files @@ -78,6 +79,7 @@ ohos_moduletest("PandingWantMgrTest") { "ces_standard:cesfwk_innerkits", "device_manager_base:devicemanagersdk", "dsoftbus_standard:softbus_client", + "hicollie_native:libhicollie", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "multimedia_image_standard:image_native", -- Gitee From 5ebc9f2c0d3ffe993e7a04133d875df4f223728f Mon Sep 17 00:00:00 2001 From: njupthan Date: Fri, 28 Jan 2022 19:24:27 +0800 Subject: [PATCH 2/2] Fix codex Signed-off-by: njupthan --- services/abilitymgr/src/ability_manager_service.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 402d038c6a0..ef7f13d9803 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -3152,7 +3152,7 @@ void AbilityManagerService::RestartAbility(const sptr &token) void AbilityManagerService::NotifyBmsAbilityLifeStatus( const std::string &bundleName, const std::string &abilityName, const int64_t launchTime, const int uid) -{ +{ auto bundleManager = GetBundleManager(); CHECK_POINTER(bundleManager); HILOG_INFO("NotifyBmsAbilityLifeStatus is called, uid :%{public}d", uid); -- Gitee