1.车机原始数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| Load: 14.49 / 8.82 / 7.01 CPU usage from 9057ms to 1851ms ago (2021-08-12 20:22:39.845 to 2021-08-12 20:22:47.051): 79% 792/system_server: 44% user + 35% kernel / faults: 1774 minor 46% 485/surfaceflinger: 24% user + 21% kernel / faults: 1815 minor 20% 1513/com.gxa.service.systemui: 19% user + 0.4% kernel / faults: 22 minor 17% 452/android.hardware.graphics.composer@2.2-service: 10% user + 6.6% kernel 14% 446/android.hardware.broadcastradio@2.0-service.g6: 1.6% user + 13% kernel 4.8% 23782/adbd: 0.2% user + 4.5% kernel / faults: 39003 minor 4.7% 293/logd: 1.1% user + 3.6% kernel / faults: 1 minor 3.8% 1099/com.android.bluetooth: 1.9% user + 1.9% kernel / faults: 141 minor 2.7% 461/android.hardware.usb@1.0-service: 0% user + 2.7% kernel 2.6% 2501/com.iflytek.autofly.avatar: 1.8% user + 0.8% kernel / faults: 16 minor 1.8% 3511/com.gxatek.cockpit.scenesengine: 1.6% user + 0.1% kernel / faults: 15 minor 1.8% 21524/kworker/1:1: 0% user + 1.8% kernel 1.3% 357/vendor.ts.systemlog@1.0-service: 0% user + 1.3% kernel / faults: 1 minor 0.5% 444/android.hardware.bluetooth@1.0-service-qti: 0.5% user + 0% kernel 0.3% 13161/kworker/1:2: 0% user + 0.3% kernel 1.2% 2612/com.iflytek.autofly.dms: 0.2% user + 0.9% kernel / faults: 3 minor 1.1% 24014/logcat: 0.1% user + 0.9% kernel 0.8% 195/spi1: 0% user + 0.8% kernel 0.8% 1347/cds_ol_rx_threa: 0% user + 0.8% kernel 0.8% 32737/kworker/u16:8: 0% user + 0.8% kernel 0.6% 1 0.6% 215/irq/136-8804000: 0% user + 0.6% kernel 0.6% 359/netd: 0.2% user + 0.4% kernel / faults: 14 minor 0.6% 2397/platformservice.Services: 0.4% user + 0.2% kernel / faults: 85 minor 0.6% 32618/com.iflytek.autofly.systemserver: 0.1% user + 0.5% kernel / faults: 274 minor 0.5% 455/android.hardware.memtrack@1.0-service: 0.1% user + 0.4% kernel 0.5% 457/android.hardware.sensors@1.0-service: 0.1% user + 0.4% kernel 0.5% 2594/com.gxa.service.bluetooth: 0.2% user + 0.2% kernel / faults: 90 minor 0.5% 30761/com.android.commands.monkey: 0.2% user + 0.2% kernel / faults: 36 minor 0.5% 30967/kworker/u16:5: 0% user + 0.5% kernel 0.4% 1772/com.android.car: 0.2% user + 0.1% kernel / faults: 48 minor 0.4% 32143/com.gxatek.cockpit.carservice: 0.2% user + 0.1% kernel / faults: 347 minor 0.2% 471/vendor.ts.gnssext@1.0-service: 0.2% user + 0% kernel 0.2% 742/mdnsd: 0.2% user + 0% kernel 0.2% 1225/com.core.system.service: 0.1% user + 0.1% kernel / faults: 91 minor 0.2% 1451/com.gxa.car.power: 0.1% user + 0.1% kernel / faults: 48 minor 0.2% 2782/com.iflytek.autofly.mediax: 0.1% user + 0.1% kernel / faults: 16 minor 0% 8/ksoftirqd/0: 0% user + 0% kernel 0.1% 9/rcu_preempt: 0% user + 0.1% kernel 0.1% 24/ksoftirqd/2: 0% user + 0.1% kernel 0.1% 30/ksoftirqd/3: 0% user + 0.1% kernel 0.1% 305/android.hardware.automotive.vehicle@2.0-service.g6: 0% user + 0.1% kernel 0.1% 309/com.desaysv.vehiclelan.proxy@1.0-service: 0% user + 0.1% kernel 0.1% 349/kworker/u17:1: 0% user + 0.1% kernel 0.1% 353/ais_v4l2_proxy: 0% user + 0.1% kernel 0.1% 447/android.hardware.camera.provider@2.4-service_64: 0% user + 0.1% kernel 0% 451/android.hardware.dsp@1.0-service: 0% user + 0% kernel 0.1% 463/android.hardware.wifi@1.0-service: 0.1% user + 0% kernel / faults: 1 minor 0% 464/vendor.desaysv.hardware.tbox@1.0-service: 0% user + 0% kernel 0.1% 609/cnss-daemon: 0% user + 0.1% kernel 0.1% 724/wlan_logging_th: 0% user + 0.1% kernel 0.1% 1243/com.android.systemui: 0.1% user + 0% kernel / faults: 69 minor 0.1% 1381/com.gxa.service.account: 0.1% user + 0% kernel / faults: 44 minor 0.1% 2567/com.gac.cloud.app: 0.1% user + 0% kernel / faults: 1 minor 0.1% 2643/com.gxa.appservice.platformadapter.adaptermainservice: 0.1% user + 0% kernel / faults: 53 minor 0.1% 3104/com.iflytek.autofly.mediax:remote: 0.1% user + 0% kernel / faults: 1 minor 0.1% 3252/android.ext.services: 0.1% user + 0% kernel / faults: 12 minor 0.1% 3267/android.ext.services: 0.1% user + 0% kernel / faults: 14 minor 0.1% 10320/com.iflytek.autofly.accountcenter: 0.1% user + 0% kernel 0% 18185/kworker/3:3: 0% user + 0% kernel 0.1% 20603/kworker/u16:3: 0% user + 0.1% kernel 0% 30508/kworker/6:0: 0% user + 0% kernel +0% 1090/sh: 0% user + 0% kernel +0% 1103/dumpsys: 0% user + 0% kernel +0% 1153/qti: 0% user + 0% kernel 29% TOTAL: 13% user + 12% kernel + 0% iowait + 2.5% irq + 0.7% softirq ------finish dumpsys cpuinfo------
|
2.负载参数解读
2.1 参数解读
1
| Load: 14.49 / 8.82 / 7.01
|
此行显示CPU负载的平均值,这三个数字表示逐渐变长的时间段(平均一分钟,五分钟和十五分钟)的平均值,如果数字较小则说明负载在降低,数字越大表示问题或机器过载。由于当前测试车机是八核处理器,我们以单核处理器来说明以上参数。
CPU处理代码相当于车辆过桥一样,单核处理器相当于桥梁,代码相当于车辆。代码在处理器上运行相当于车辆在桥上跑一样。因此,以上数字含义:
- 0.00表示桥上根本没有流量。实际上,介于0.00和1.00之间意味着没有备份,而到达的汽车将直接开启。
- 1.00表示桥梁正好处于饱和容量状态。一切都还不错,但如果流量变得更重,事情就会变慢。
- 超过1.00表示有拥堵。那么,2.00意味着总共有两条车道 - 一条车道的价值在桥上,一条车道值得等待。3.00意味着总共有三条车道 - 桥上有一条车道,两条车道值得等待。
这基本上就是CPU负载。代码(“汽车”)是使用一段CPU时间片(“过桥”)或排队使用CPU的过程。Unix将此称为运行队列长度
:当前运行的进程数加上等待(排队)运行的进程数之和。
2.2 理想负载
如果单核处理器一直处于1,那么说明当前处理器一直在满负荷运行,没有任何余量。CPU长时间处于满负荷或者超负荷运行将导致CPU大量发热,或者降低CPU寿命。因此需要一个参考值来衡量当前系统CPU是否健康。经验参考值如下(单核):
- 阈值大于0.7:如果长时间平均阈值大于0.7,需要在事态进一步恶化之前进行调查。
- 阈值大于1.0:如果长时间平均阈值大于1.0,需要找到问题并立即修复,否者可能将面临半夜起来调查问题的情况
- 阈值大于5.0:如果长时间平均值大于5.0,系统一定出现严重异常,紧要任务是立即排除严重故障,否则影响cpu寿命等不可预知的问题。当前系统处于长时间没有响应,或者接近死机了。你不应该让系统达到这个值。
2.3 多核和多处理器
经常有听到有多少个处理器,一个处理器有多少核,让我们谈谈多核与多处理器。出于性能目的,具有单个双核处理器的机器基本上等同于具有两个处理器的机器,每个处理器具有一个核心?是的,这里有许多关于缓存数量,处理器之间的进程切换频率等的细微之处。尽管有这些更精细的点,但为了确定CPU负载值的大小,核心的总数是重要的,无论如何这些核心分布在许多物理处理器上。因此无论多少处理器,我们主要考虑该机器上有多少核!!因此又出现两个经验法则:
- “核心数=最大负载”经验法则:在多核系统上,您的负载不应超过可用核心数
- 该“内核是内核”经验法则:不管核心是如何分布在CPU的无所谓,两个四核==四个双核==八个单核。这些都是用于这些目的的八个核心。
2.4 如何观察这三个参数
上面提到以上三个参数代表:一分钟,五分钟,十五分钟平均值。那么我们如何观察并采取行动呢?
- 一分钟:如果监控中显示一分钟cpu负载大于核心数,可以暂时不采取行动,可能是因为开机启动,突然有高cpu进程运行等原因。
- 五分钟:如果监控中显示五分钟cpu负载大于核心数,需要结合需求调查对高负荷进程进行调查
- 十五分钟:如果监控中显示十五分钟cpu负荷大于核心数,需要评估高负荷进程CPU消耗原因或者CPU硬件瓶颈
获取机器CPU信息指令,每一块信息代表一个核的信息。
3. 单应用参数解读
3.1 时间戳解析
1 2 3 4 5
| CPU usage from 9057ms to 1851ms ago (2021-08-12 20:22:39.845 to 2021-08-12 20:22:47.051):
|
3.2 单应用解析
Dumpsys cpuinfo计算cpu使用率是基于 SystemClock.uptimeMillis()差值来计算得到的。详细见:《Android CPU使用率:top和dump cpuinfo的不同》
1 2 3 4 5 6 7
| 79% 792/system_server: 44% user + 35% kernel / faults: 1774 minor
|
3.3 minor解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| private static final int[] PROCESS_STATS_FORMAT = new int[] { PROC_SPACE_TERM, PROC_SPACE_TERM|PROC_PARENS, PROC_SPACE_TERM, PROC_SPACE_TERM, PROC_SPACE_TERM, PROC_SPACE_TERM, PROC_SPACE_TERM, PROC_SPACE_TERM, PROC_SPACE_TERM, PROC_SPACE_TERM|PROC_OUT_LONG, PROC_SPACE_TERM, PROC_SPACE_TERM|PROC_OUT_LONG, PROC_SPACE_TERM, PROC_SPACE_TERM|PROC_OUT_LONG, PROC_SPACE_TERM|PROC_OUT_LONG, };
public long getCpuTimeForPid(int pid) { synchronized (mSinglePidStatsData) { final String statFile = "/proc/" + pid + "/stat"; final long[] statsData = mSinglePidStatsData; if (Process.readProcFile(statFile, PROCESS_STATS_FORMAT, null, statsData, null)) { long time = statsData[PROCESS_STAT_UTIME] + statsData[PROCESS_STAT_STIME]; return time * mJiffyMillis; } return 0; } }
|
从上面代码可以看出minor代表小错误,通过读取/proc//stat中第10个数值获取的。至于minor是什么,详见《4.Understanding page faults and memory swap-in/outs: when should you worry?》
4. 最后
1 2 3 4 5 6 7
| 29% TOTAL: 13% user + 12% kernel + 0% iowait + 2.5% irq + 0.7% softirq
|
参考文档
1.理解Linux CPU负载和 CPU使用
2.Understanding Linux CPU Load - when should you be worried?
3.dumpsys cpuinfo in Android: Interpreting the results of this command
4.Understanding page faults and memory swap-in/outs: when should you worry?