【Android】CarWatchDog I/O监控服务

Android Car WatchDog I/O监控服务

  • 背景:
    某基于Android 13的车载系统。

某天长时间测试一款3方(非SystemApp)时,该款应用偶发闪退现象。

通过日志分析,发现应用被系统的 Car WatchDog(喂狗服务)Disable掉了。
日志如下

bash 复制代码
Disabled package *** on user*** until used due to resource overuse

对应的代码部分。

/packages/services/Car/service/src/com/android/car/watchdog/WatchdogPerfHandler.java

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使用情况。

上述问题分析

回到上面说的问题。某一款三方应用,偶尔退出,并且系统中存在下述日志。

bash 复制代码
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 复制代码
<?xml version='1.0' encoding='utf-8'?>
<!-- Copyright (C) 2021 The Android Open Source Project

     Licensed 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 at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed 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 and
     limitations under the License.
-->

<resourceOveruseConfiguration version="1.0">
  <componentType> THIRD_PARTY </componentType>
  <ioOveruseConfiguration>
    <!-- Default thresholds in MiB for all third-party packages that don't have app category
         specific thresholds. -->
    <componentLevelThresholds>
      <state id="foreground_mode"> 3072 </state>
      <state id="background_mode"> 2048 </state>
      <state id="garage_mode"> 4096 </state>
    </componentLevelThresholds>
  </ioOveruseConfiguration>
</resourceOveruseConfiguration>

修改: 去掉该三方引用的无用I/O操作。后续测试,无偶先问题。

关于Android源码部分的实现,可以感兴趣的可以阅读如下源文件。
packages/services/Car/cpp/watchdog/server/src/IoOveruseMonitor.cpp

相关推荐
努力努力再努力wz8 分钟前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
撩得Android一次心动12 分钟前
C语言基础笔记3【个人用】
android·c语言·开发语言·笔记
小离a_a21 分钟前
uniapp小程序封装圆环显示比例数据
android·小程序·uni-app
三少爷的鞋22 分钟前
Android 面试系列:runBlocking 到底该在哪用?
android
DogDaoDao8 小时前
Android 硬件编码器参数完全指南:MediaCodec 深度解析
android·音视频·视频编解码·h264·硬编码·视频直播·mediacodec
JohnnyDeng949 小时前
Android 自定义 View:Canvas 绘图与事件分发深度解析
android
Android小码家13 小时前
Framework之Launcher小窗开发
android·framework·虚拟屏·小窗
赏金术士13 小时前
第七章:状态管理实战与架构总结
android·ui·kotlin·compose
颂love14 小时前
MySQL的执行流程
android·数据库·mysql
云起SAAS18 小时前
抖音小游戏源码 - 消消乐 | 含激励广告+成就系统 | 开箱即用商业级消除游戏模板
android·游戏·广告联盟·看激励广告联盟流量主·抖音小游戏源码 - 消消乐