Android进程优先级相关概念

    xiaoxiao2025-05-29  87

    前置知识:

    oom_adj :oom_adj(即权重值)的值用来标记进程的重要程度,值越小,越重要

    1.查看当前在运行的进程

    ps  命令  

    基于api 21 

    USER     PID   PPID  VSIZE  RSS     WCHAN    PC        NAME root      1     0     2936   548   c02cb2ef 0806b8f0 S /init root      2     0     0      0     c023edb3 00000000 S kthreadd root      3     2     0      0     c0244320 00000000 S ksoftirqd/0 root      4     2     0      0     c023ae80 00000000 S kworker/0:0 root      5     2     0      0     c023ae80 00000000 S kworker/0:0H root      6     2     0      0     c023ae80 00000000 S kworker/u8:0 root      7     2     0      0     c0244320 00000000 S migration/0 root      8     2     0      0     c026ffe2 00000000 S rcu_preempt root      9     2     0      0     c026ffe2 00000000 S rcu_bh root      10    2     0      0     c026ffe2 00000000 S rcu_sched root      11    2     0      0     c0244320 00000000 S migration/1 root      12    2     0      0     c0244320 00000000 S ksoftirqd/1 root      13    2     0      0     c023ae80 00000000 S kworker/1:0 root      14    2     0      0     c023ae80 00000000 S kworker/1:0H root      15    2     0      0     c0244320 00000000 S migration/2 root      16    2     0      0     c0244320 00000000 S ksoftirqd/2 root      17    2     0      0     c023ae80 00000000 S kworker/2:0 root      18    2     0      0     c023ae80 00000000 S kworker/2:0H root      19    2     0      0     c0244320 00000000 S migration/3 root      20    2     0      0     c0244320 00000000 S ksoftirqd/3 root      21    2     0      0     c023ae80 00000000 S kworker/3:0 root      22    2     0      0     c023ae80 00000000 S kworker/3:0H root      23    2     0      0     c023ac08 00000000 S khelper root      24    2     0      0     c023ae80 00000000 S kworker/u8:1 root      263   2     0      0     c023ac08 00000000 S writeback root      265   2     0      0     c023ac08 00000000 S bioset root      267   2     0      0     c023ac08 00000000 S kblockd root      362   2     0      0     c023ac08 00000000 S ata_sff root      373   2     0      0     c04e04b1 00000000 S khubd root      381   2     0      0     c023ac08 00000000 S md root      389   2     0      0     c023ac08 00000000 S cfg80211 root      390   2     0      0     c023ae80 00000000 S kworker/1:1 root      507   2     0      0     c029b2f6 00000000 S kswapd0 root      570   2     0      0     c02ea9d0 00000000 S fsnotify_mark root      589   2     0      0     c023ac08 00000000 S crypto root      609   2     0      0     c023ae80 00000000 S kworker/0:1 root      610   2     0      0     c023ae80 00000000 S kworker/2:1 root      611   2     0      0     c023ae80 00000000 S kworker/3:1 root      624   2     0      0     c023ae80 00000000 S kworker/u8:2 root      717   2     0      0     c023ac08 00000000 S iscsi_eh root      731   2     0      0     c0439c73 00000000 S scsi_eh_0 root      734   2     0      0     c0439c73 00000000 S scsi_eh_1 root      737   2     0      0     c023ae80 00000000 S kworker/u8:3 root      806   2     0      0     c023ac08 00000000 S binder root      834   2     0      0     c023ac08 00000000 S deferwq root      835   1     2928   440   c02cb2ef 0806b8f0 S /sbin/ueventd root      1155  2     0      0     c023ae80 00000000 S kworker/0:1H root      1156  2     0      0     c0347a36 00000000 S jbd2/vda-8 root      1157  2     0      0     c023ac08 00000000 S ext4-dio-unwrit root      1159  2     0      0     c0347a36 00000000 S jbd2/vdb-8 root      1160  2     0      0     c023ac08 00000000 S ext4-dio-unwrit root      1165  2     0      0     c0347a36 00000000 S jbd2/vdc-8 root      1166  2     0      0     c023ac08 00000000 S ext4-dio-unwrit logd      1167  1     16008  2292  ffffffff b7731481 S /system/bin/logd root      1168  1     4000   324   c02ed451 08095985 S /sbin/healthd root      1169  1     5820   1412  c02ed451 b7668b05 S /system/bin/lmkd system    1170  1     3844   736   c054e725 b773c7a6 S /system/bin/servicemanager root      1171  1     11460  2024  ffffffff b77116f1 S /system/bin/vold system    1172  1     90664  4072  ffffffff b7760b05 S /system/bin/surfaceflinger shell     1175  1     3980   1012  c03f0b31 b7674b36 S /system/bin/sh root      1176  1     101248 688   ffffffff 0806bdc5 S /sbin/adbd root      1177  1     23016  1544  ffffffff b76a36f1 S /system/bin/netd root      1178  1     4616   944   c0561671 b771ada3 S /system/bin/debuggerd radio     1179  1     12352  1460  ffffffff b767e6f1 S /system/bin/rild drm       1180  1     16828  3704  ffffffff b76597a6 S /system/bin/drmserver media     1181  1     133996 12036 ffffffff b77027a6 S /system/bin/mediaserver install   1183  1     3864   868   c05d4f03 b7749b36 S /system/bin/installd keystore  1184  1     7828   1988  c054e725 b76c07a6 S /system/bin/keystore root      1187  1     1217856 50224 ffffffff b76f43d5 S zygote root      1238  2     0      0     c023ae80 00000000 S kworker/2:1H root      1284  2     0      0     c02635e9 00000000 S kauditd root      1291  2     0      0     c023ae80 00000000 S kworker/3:1H root      1594  2     0      0     c023ae80 00000000 S kworker/1:1H system    1613  1187  1382064 99156 ffffffff b76f3b05 S system_server u0_a13    1943  1187  1301676 69172 ffffffff b76f3b05 S com.android.systemui media_rw  1973  1     7828   764   ffffffff b76b1b36 S /system/bin/sdcard u0_a31    2004  1187  1256756 38720 ffffffff b76f3b05 S com.android.inputmethod.latin radio     2051  1187  1266232 45580 ffffffff b76f3b05 S com.android.phone radio     2084  1187  1236352 30508 ffffffff b76f3b05 S com.android.server.telecom system    2113  1187  1244972 28748 ffffffff b76f3b05 S com.android.settings u0_a43    2131  1187  1237232 26700 ffffffff b76f3b05 S com.android.printspooler u0_a5     2159  1187  1244104 37184 ffffffff b76f3b05 S android.process.media u0_a2     2187  1187  1246832 36020 ffffffff b76f3b05 S android.process.acore u0_a8     2303  1187  1286968 70752 ffffffff b76f3b05 S com.android.launcher u0_a7     2323  1187  1399528 94508 ffffffff b76f3b05 S com.google.android.gms.persistent u0_a28    2351  1187  1246124 29280 ffffffff b76f3b05 S com.android.exchange u0_a7     2375  1187  1247684 33348 ffffffff b76f3b05 S com.google.process.gapps u0_a26    2392  1187  1255464 36596 ffffffff b76f3b05 S com.android.email u0_a7     2450  1187  1579872 101984 ffffffff b76f3b05 S com.google.android.gms u0_a36    2565  1187  1238472 29068 ffffffff b76f3b05 S com.android.music u0_a22    2589  1187  1242032 30744 ffffffff b76f3b05 S com.android.deskclock u0_a4     2685  1187  1241972 27552 ffffffff b76f3b05 S com.android.dialer system    2702  1187  1234492 25936 ffffffff b76f3b05 S com.android.keychain u0_a18    2759  1187  1249848 31140 ffffffff b76f3b05 S com.android.calendar u0_a1     2781  1187  1237824 31532 ffffffff b76f3b05 S com.android.providers.calendar u0_a9     2803  1187  1235380 25868 ffffffff b76f3b05 S com.android.managedprovisioning u0_a10    2830  1187  1248568 31756 ffffffff b76f3b05 S com.android.mms u0_a7     2965  1187  1352828 42936 ffffffff b76f3b05 S com.google.android.gms.ui u0_a7     3054  1187  1360172 47648 ffffffff b76f3b05 S com.google.android.gms.unstable root      3425  1176  3980   1028  c023517f b7627481 S /system/bin/sh

    u0_a59    4264  1187  1254880 41968 ffffffff b76f3b05 S calc.superdy.ttest root      3430  3425  3980   1024  c023517f b76b2481 S sh root      3466  3430  5708   1088  00000000 b7728b36 R ps

    2. 查看某个进程的优先级

    cat /proc/进程id/oom_adj

    例如:

    cat /proc/1187/oom_adj   查看zygote进程的优先级

    zygote 的 oom_adj value为-17

    cat /proc/1613/oom_adj   查看system_server 进程的优先级

    system_server 进程优先级为-15

    cat /proc/2303/oom_adj   查看launcher进程的优先级

    launcher进程优先级为0

    cat /proc/4264/oom_adj  查看当前activity可见的进程的优先级

    当前可见的进程ttest的进程优先级为0

    3.ProcessList.java文件

    ProcessList.java文件内部定义了一些进程的adj值

    如下:

    // OOM adjustments for processes in various states: // Adjustment used in certain places where we don't know it yet. // (Generally this is something that is going to be cached, but we // don't know the exact value in the cached range to assign yet.) static final int UNKNOWN_ADJ = 16; // This is a process only hosting activities that are not visible, // so it can be killed without any disruption. static final int CACHED_APP_MAX_ADJ = 15; static final int CACHED_APP_MIN_ADJ = 9; // The B list of SERVICE_ADJ -- these are the old and decrepit // services that aren't as shiny and interesting as the ones in the A list. static final int SERVICE_B_ADJ = 8; // This is the process of the previous application that the user was in. // This process is kept above other things, because it is very common to // switch back to the previous app. This is important both for recent // task switch (toggling between the two top recent apps) as well as normal // UI flow such as clicking on a URI in the e-mail app to view in the browser, // and then pressing back to return to e-mail. static final int PREVIOUS_APP_ADJ = 7; // This is a process holding the home application -- we want to try // avoiding killing it, even if it would normally be in the background, // because the user interacts with it so much. static final int HOME_APP_ADJ = 6; // This is a process holding an application service -- killing it will not // have much of an impact as far as the user is concerned. static final int SERVICE_ADJ = 5; // This is a process with a heavy-weight application. It is in the // background, but we want to try to avoid killing it. Value set in // system/rootdir/init.rc on startup. static final int HEAVY_WEIGHT_APP_ADJ = 4; // This is a process currently hosting a backup operation. Killing it // is not entirely fatal but is generally a bad idea. static final int BACKUP_APP_ADJ = 3; // This is a process only hosting components that are perceptible to the // user, and we really want to avoid killing them, but they are not // immediately visible. An example is background music playback. static final int PERCEPTIBLE_APP_ADJ = 2; // This is a process only hosting activities that are visible to the // user, so we'd prefer they don't disappear. static final int VISIBLE_APP_ADJ = 1; // This is the process running the current foreground app. We'd really // rather not kill it! static final int FOREGROUND_APP_ADJ = 0; // This is a process that the system or a persistent process has bound to, // and indicated it is important. static final int PERSISTENT_SERVICE_ADJ = -11; // This is a system persistent process, such as telephony. Definitely // don't want to kill it, but doing so is not completely fatal. static final int PERSISTENT_PROC_ADJ = -12; // The system process runs at the default adjustment. static final int SYSTEM_ADJ = -16;

     

    参考:

    https://www.jianshu.com/p/6201dc3a447a

    https://www.jianshu.com/p/10cce92fc7b1

     

    最新回复(0)