转自 https://www.jianshu.com/p/6bd4813b3c60

我们都知道Android是基于Linux的操作系统,它使用的是默认的Shell是Ash,之前的一篇文章有提到过《Shell脚本的简单介绍》,但是这个东西很明显是不能满足Android需求的,所以Google开发了很多针对Android的命令行工具。

从git上把Android的源码拉下,就会发现有一个cmds的文件夹,里边放着的全是Google为Android开发的shell命令。其中dumpsys在*${path}/frameworks/native/cmds/dumpsys*目录,如果感兴趣可以自行去研究研究。

执行adb shell dumpsys,Android就会把系统里边的各种服务的状态给你dump出来。这里要提一下,不同的Android版本提供的服务会有所不同,不同的ROM厂商也会定制自己的服务跑在系统里边。

我的手机小米4C,MIUI6.3.31的系统(Android5.1.1),Dump出来的 结果大概是这样子。

Currently running services:  DisplayFeatureControl  DockObserver  MiuiBackup  MiuiInit  SurfaceFlinger  accessibility  account  activity  alarm  android.security.keystore  appops  appwidget  assetatlas  audio  backup  battery  batteryproperties  batterystats  bluetooth_manager  clipboard  cneservice  com.qualcomm.qti.auth.fidocryptodaemon  com.xiaomi.mtservice  com.xiaomi.vsimservice  commontime_management  connectivity  consumer_ir  content  country_detector  cpuinfo  dbinfo  device_policy  devicestoragemonitor  diskstats  display  display.qservice  dpmservice  dreams  drm.drmManager  dropbox  entropy  ethernet  fingerprint  gfxinfo  hardware  imms  ims  input  input_method  iphonesubinfo  isms  isub  jobscheduler  launcherapps  location  locationpolicy  lock_settings  media.audio_flinger  media.audio_policy  media.camera  media.player  media.sound_trigger_hw  media_projection  media_router  media_session  meminfo  miui.fdpp  miui.security.keystore  miui.shell  miui.whetstone  miui.whetstone.klo  miui.whetstone.mcd  miui.whetstone.net  miui.whetstone.power  mount  netpolicy  netstats  network_management  network_score  notification  package  permission  phone  power  print  procstats  qti.ims.connectionmanagerservice  restrictions  rttmanager  samplingprofiler  scheduling_policy  search  security  sensorservice  serial  servicediscovery  simphonebook  sip  statusbar  telecom  telephony.registry  textservices  trust  uimode  updatelock  usagestats  usb  user  vendor.qcom.PeripheralManager  vibrator  voiceinteraction  wallpaper  webviewupdate  wfdservice  whetstone.activity  wifi  wifip2p  wifiscanner  window

然后后面还有很长,紧接着会把每个服务的dump的详细状况列举出来。这里我们能看到有几个Miui、com.xiaomi 开头的,这就是小米公司提供的服务。其他大部分是Android的标准的服务。

为了方便查看,我们可以传一个参数,来过滤掉多余的信息,比如dumpsys meminfo查看各个进程所占内存的情况。

下面我们就来介绍几个常用的services,默认是在Android的shell环境下。

  • account:账号管理
    就是App向AccountManager注册的账号,执行dumpsys account,会列举出绑定的账号,和各个App注册的ServiceInfo。
  • devicestoragemonitor存储状态
    执行dumpsys devicestoragemonitor,主要是会显示磁盘的使用状况
    结果:
Current DeviceStorageMonitor state:  mFreeMem=8.55 GB mTotalMemory=11.31 GB  mFreeMemAfterLastCacheClear=8.55 GB  mLastReportedFreeMem=8.55 GB mLastReportedFreeMemTime=-21m31s397ms  mLowMemFlag=false mMemFullFlag=false mIsBootImageOnDisk=true  mClearSucceeded=false mClearingCache=false  mMemLowThreshold=500 MB mMemFullThreshold=1.00 MB  mMemCacheStartTrimThreshold=375 MB mMemCacheTrimToThreshold=750 MB
  • activity:跟Activity相关的组件的状态
    这个命令支持子命令,通过-h可以看到子参数的列表。
    执行dumpsys activity -h,查看到的参数列表
Activity manager dump options:  [-a] [-c] [-p package] [-h] [cmd] ...  cmd may be one of:    a[ctivities]: activity stack state    r[recents]: recent activities state    b[roadcasts] [PACKAGE_NAME] [history [-s]]: broadcast state    i[ntents] [PACKAGE_NAME]: pending intent state    p[rocesses] [PACKAGE_NAME]: process state    o[om]: out of memory management    prov[iders] [COMP_SPEC ...]: content provider state    provider [COMP_SPEC]: provider client-side state    s[ervices] [COMP_SPEC ...]: service state    as[sociations]: tracked app associations    service [COMP_SPEC]: service client-side state    package [PACKAGE_NAME]: all state related to given package    all: dump all activities    top: dump the top activity    write: write all pending state to storage    track-associations: enable association tracking    untrack-associations: disable and clear association tracking  cmd may also be a COMP_SPEC to dump activities.  COMP_SPEC may be a component name (com.foo/.myApp),    a partial substring in a component name, a    hex object identifier.  -a: include all available server state.  -c: include client state.  -p: limit output to given package.

这里非常值得一提的就是 OOM参数,这里是指被踢出内存的优先级,也就是我们常说的进程优先级,值越小,就优先级越高,越不容易被杀,可以出现负数,系统App一般才会为负数,一般App最高为0。
当然你还可以直接查看进程的优先级oom_adj的值
//查看进程的优先级

cat /proc/${pid}/oom_adj
  • battery:电池状态
    执行dumpsys battery
    结果:
Current Battery Service state:  AC powered: false  USB powered: true  Wireless powered: false  status: 5  health: 2  present: true  level: 100  scale: 100  voltage: 4376  temperature: 272  technology: Li-poly
  • batterystats:各应用耗电量信息
    支持子命令的,执行dumpsys batterystats -h查看参数列表
Battery stats (batterystats) dump options:  [--checkin] [--history] [--history-start] [--unplugged] [--charged] [-c]  [--reset] [--write] [-h] []  --checkin: format output for a checkin report.  --history: show only history data.  --history-start : show only history data starting at given time offset.  --unplugged: only output data since last unplugged.  --charged: only output data since last charged.  --reset: reset the stats, clearing all current data.  --write: force write current collected stats to disk.  : optional name of package to filter output by.  -h: print this help text.Battery stats (batterystats) commands:  enable|disable 
  • alarm:Alarm的唤醒队列信息
    查看放到定时队列中的事件
    有些时候adb dumpsys alarm命令输出再cmd窗口显示不全,可以通过 以下命令输出到电脑对应文件中查看
 adb shell dumpsys alarm > f:/alarm.txt
  • cpuinfo:各进程使用CPU信息
    查看一段时间段内各个进程使用CPU的信息,包括user、kernel区分
  • dbinfo:各进程使用SQLite数据的信息
    查看各个进程使用数据库的状况,sql的执行时间等
  • diskstats:磁盘相关信息
    执行dumpsys diskstats
    结果:
Latency: 1ms [512B Data Write]Data-Free: 8963580K / 11855028K total = 75% freeCache-Free: 371304K / 380888K total = 97% freeSystem-Free: 299116K / 1889440K total = 15% free
  • dropbox:各进程的dropbox的日志信息

  • statusbar:状态栏相关的信息

  • usagestats:每个界面启动的时间

  • meminfo:各进程的内存使用状况
    执行dumpsys meminfo查看的每个进程占用PSS的列表
    如果后面接pid或者包名就可以查看具体某个进程的内存详细状况
    执行dumpsys meminfo com.eg.android.AlipayGphone
    结果:

  • package : 查看安装的信息
    主要就是获取AndroidManifest.xml里边的信息

  • window:键盘,窗口和它们的关系

  • wifi:WIFI的信息
    但是这个log太多了,看不明白

更多相关文章

  1. Android启动过程简析
  2. Android(安卓)API课程1: Application Fundamentals
  3. Android(安卓)核心分析 之八------Android(安卓)启动过程详解
  4. Android(安卓)内存管理机制
  5. 「Android」基于轻量级Messenger的进程通信
  6. android单元测试
  7. Android属性设置大全
  8. android文件关联之mime type
  9. Android中查看网卡设备信息

随机推荐

  1. SQL 研究 相似的数据类型
  2. SQLServer 中.与::的区别
  3. SQLServer CONVERT 函数测试结果
  4. 除MSSQL数据库text字段中恶意脚本的删方
  5. SQL 截取字符串应用代码
  6. SQLServer 数据库备份过程中经常遇到的九
  7. SQLServer 触发器 数据库进行数据备份
  8. SQLserver2000 企业版 出现"进程51发生了
  9. 远程连接SQLSERVER 2000服务器方法
  10. 数据转换冲突及转换过程中大对象的处理