东莞网站优化的具体方案,seo先上排名后收费,八步网站建设,北京网页设计与网站建设Android Car WatchDog I/O监控服务
背景#xff1a; 某基于Android 13的车载系统。
某天长时间测试一款3方#xff08;非SystemApp#xff09;时#xff0c;该款应用偶发闪退现象。 通过日志分析#xff0c;发现应用被系统的 Car WatchDog#xff08;喂狗服务#xff…Android Car WatchDog I/O监控服务
背景 某基于Android 13的车载系统。
某天长时间测试一款3方非SystemApp时该款应用偶发闪退现象。 通过日志分析发现应用被系统的 Car WatchDog喂狗服务Disable掉了。 日志如下
Disabled package *** on user*** until used due to resource overuse对应的代码部分。 /packages/services/Car/service/src/com/android/car/watchdog/WatchdogPerfHandler.java
/** Disables a package for specific user until used. */
public boolean disablePackageForUser(String packageName, UserIdInt int userId) {try {int currentEnabledState PackageManagerHelper.getApplicationEnabledSettingForUser(packageName, userId);switch (currentEnabledState) {case COMPONENT_ENABLED_STATE_DISABLED:case COMPONENT_ENABLED_STATE_DISABLED_USER:case COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED:Slogf.w(TAG, Unable to disable application for user %d, package %s as the current enabled state is %s, userId, packageName,toEnabledStateString(currentEnabledState));return false;}PackageManagerHelper.setApplicationEnabledSettingForUser(packageName,COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, /* flags */ 0, userId,mContext.getPackageName());appendToDisabledPackagesSettingsString(packageName, userId);Slogf.i(TAG, Disabled package %s on user %d until used due to resource overuse,packageName, userId);} catch (Exception e) {Slogf.e(TAG, e, Failed to disable application for user %d, package %s, userId,packageName);return false;}return true;
}问题分析
Car WatchDog中的IO Monitor会监监控所有应用或服务的磁盘I/O用量。以保证系统的稳定。主要包括
应用的磁盘I/O写入量。应用的System-wide I/O写入量宽带)
当应用或服务超过预定义的阈值时Car WatchDog会对相应的应用或者服务执行相应操作比如 kill掉
系统服务或应用不受限制可以通过配置文件指定哪些系统服务或应用受到监控三方应用监控被进行限制。
设定的阈值统计范围时一天内。 Car WatchDog中的IO Monitor会统计一天内的I/O使用情况。
上述问题分析
回到上面说的问题。某一款三方应用偶尔退出并且系统中存在下述日志。
Disabled package *** on user*** until used due to resource overuse该日志说明这款应用因为I/O使用超过阈值被系统Kill。 后续通过复现抓取IO相应日志发现出现问题时该应用在一天内的写入量超过3GB这个值已经超过系统的阈值配置。
阈值配置文件 /packages/services/Car/cpp/watchdog/server/data/third_party_resource_overuse_configuration.xml
?xml version1.0 encodingutf-8?
!-- Copyright (C) 2021 The Android Open Source ProjectLicensed under the Apache License, Version 2.0 (the License);you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an AS IS BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
--resourceOveruseConfiguration version1.0componentType THIRD_PARTY /componentTypeioOveruseConfiguration!-- Default thresholds in MiB for all third-party packages that dont have app categoryspecific thresholds. --componentLevelThresholdsstate idforeground_mode 3072 /statestate idbackground_mode 2048 /statestate idgarage_mode 4096 /state/componentLevelThresholds/ioOveruseConfiguration
/resourceOveruseConfiguration修改 去掉该三方引用的无用I/O操作。后续测试无偶先问题。
关于Android源码部分的实现可以感兴趣的可以阅读如下源文件。 packages/services/Car/cpp/watchdog/server/src/IoOveruseMonitor.cpp