当前位置: 首页 > wzjs >正文

开发app和网站建设那个好些石家庄谷歌seo

开发app和网站建设那个好些,石家庄谷歌seo,wordpress怎么在主题上更改,wordpress域名邮箱设置摘要 原生的HighCPU使用率查杀机制是基于读取/proc/pid/stat中的utime stime后,根据CPU使用率 (utime stime / totalTime)*100%进行实现,当检测后台进程的CPU使用率超过阈值时,执行查杀和统计到电池数据中。 细节点: 1. 原生根…

摘要

原生的HighCPU使用率查杀机制是基于读取/proc/pid/stat中的utime + stime后,根据CPU使用率= (utime + stime / totalTime)*100%进行实现,当检测后台进程的CPU使用率超过阈值时,执行查杀和统计到电池数据中。

细节点:

1. 原生根据不同的后台运行时间,制定不同的查杀阈值,这点不错哈;

2. 如果对超级应用或核心应用有保活的定制需求,需要进行在原生的CPU高负载策略进行规避哈;

CPU高负载检查主要是在AMS中进行实现,具体关注如下4个函数,就可以大概清楚原生的CPU高负载查杀机制了

1.checkExcessivePowerUsageLPr()函数

1.更新cpu统计信息 updateCpuStatsNow()

2.遍历所有进程 forEachLruProcessesLOSP

3.计算进程变成非重要进程的时长

4.不同app根据非重要状态时长设定不同CPU阈值

若非重要状态的持续时长5分钟内,则CPU使用率阈值25%

若非重要状态的持续时长10分钟内,则CPU使用率阈值25%

若非重要状态的持续时长15分钟内,则CPU使用率阈值10%

若非重要状态的持续时长大于15分钟,则CPU使用率阈值2%

2.updateAppProcessCpuTimeLPr()函数

主要通过PhantomProcessRecord获取进程CPU时间

1.获取app当前CPU使用时间

2.获取app上次CPU使用时间

3.CPU使用时间=当前-上次

4.检查进程CPU使用时间是否超过阈值

如果超过阈值,则进行查杀处理

    @GuardedBy("mProcLock")    private void updateAppProcessCpuTimeLPr() {        ...        // CPU使用率换算和阈值超过判断        if (checkExcessivePowerUsageLPr(uptimeSince, doCpuKills, cpuTimeUsed,                    app.processName, app.toShortString(), cpuLimit, app)) {             ...            if (app.getThread() == null               || 如果有保活的需求,可以新增到该处               || app.mState.getSetProcState() < ActivityManager.PROCESS_STATE_HOME) {                   return;            }            // 超过阈值,执行查杀            app.killLocked("excessive cpu " + cpuTimeUsed + " during "                    + uptimeSince + " dur=" + checkDur + " limit=" + cpuLimit,                    ApplicationExitInfo.REASON_EXCESSIVE_RESOURCE_USAGE,                    ApplicationExitInfo.SUBREASON_EXCESSIVE_CPU,                    true);      ...    }

3.checkExcessivePowerUsageLPr()函数

1.将CPU使用时间转化为CPU使用率

CPU使用率=(CPU运行时间 * 100) / uptimeSince

2. 如果超过阈值,则上报到batteryStats统计,并最终返回true让策略进行查杀处理

4.getCpuTimeForPid函数

读文件节点/proc/pid/stat获取utime和stime,其中utime数据第14位,stime数据第15位。CPU使用率= (utime + stime / totalTime)*100%

public long getCpuTimeForPid(int pid) {

final String statFile = "/proc/" + pid + "/stat";

...

}

其他CPU负载值的获取方式介绍

cpu负载值获取方式

计算公式

优点

缺点

adb shell top

直接可查看进程级的cpu负载百分百值

获取方便且准确度高

本身top命令会存在高cpu负载的占用

adb shell top -H

直接可查看线程级的cpu负载百分百值

adb shell cat /proc/pid/stat

cpuload = (utime + stime / totalTime)*100%

utime数据第14位,stime数据第15位

读文件节点获取,方便代码或脚本实现

批量读取大量文件节点

原生 框架读文件节点/proc/pid/stat

内核层

中task_struc接口获取utime + stime,cpuload = (utime + stime / totalTime)*100%

内存方式读取,性能效率最高,且本身cpu占用率及其低,0.3%以内

内核层到框架层通信和策略联动,虽然麻烦,从性能角度来说我觉得是最佳方案

Perfetto或trace

线程的cpu负载值 = 该线程运行总时长 / 总时长 = WallDuration / totalTime 

直观准确

需要抓trace哈

adb shell dumpsys cpuinfo

直接查看进程及对应线程的cpu负载百分百值

获取方便又详细且准确率高

dump命令本身也会存在高cpu负载占用,即性能耗时

utime: 线程或进程在用户模式下花费的时间,单位是 jiffies。

stime: 线程或进程在内核模式下花费的时间,单位是 jiffies。

我认为的最佳方案是:内核层通过内存方式读取线程或进程用户态CPU时间(utime)和内核态CPU时间(stime)并换算为cpu负载值+ 框架层场景策略进行cpu高负载管控

http://www.dtcms.com/wzjs/330962.html

相关文章:

  • 怎样评价一个网站做的好与不好扬州网络推广公司
  • 请问哪个网站可以做二类学分东莞网站设计公司排名
  • 怎么做义工网站网络营销管理办法
  • 怎样做网站的seo整站seo服务
  • 厦门市建设局加装电梯公示网站海南百度推广运营中心
  • 我想开网站绍兴百度推广优化排名
  • 惠安建设局网站软文写作案例
  • 手机欧美视频网站模板下载 迅雷下载地址seo推广优化外包公司
  • 可以做编程题的网站网站应该如何进行优化
  • 云南省住房和建设厅网站广告宣传网站
  • 启凡科技企业网站建设把百度网址大全设为首页
  • 如何建设微信商城网站聚名网官网
  • 深圳积分商城网站建设网站设计公司模板
  • wordpress嵌入外部网页河北seo平台
  • 如何自己建设简单的手机网站怎么优化网络
  • 专业手机网站建设公司如何做企业产品推广
  • wordpress 3.3.2网站seo公司
  • 门户网站做吗谷歌seo零基础教程
  • 几百块钱可以做网站吗网站推广优化外包公司哪家好
  • 公司网站建设服务百度总部电话
  • wordpress主题后台不显示江西seo推广软件
  • 高校网站站群什么是网络软文营销
  • 平泉网站建设百度云账号登录
  • 微商货源网什么什么网站建设长春网站优化团队
  • 网站建设属于什么资产媒介星软文平台官网
  • 网站建设在家兼职做seo优化搜索推广
  • 功能类似淘宝的网站建设热狗网站排名优化外包
  • 免费网站怎么样广州seo网站优化培训
  • 潍坊网络营销公司有哪些作品提示优化要删吗
  • 宁波专业网站建设公司seo优化推广技巧