您的位置:永利集团登录网址 > 永利集团登录网址 > 小白学习instrument之Activity Monitor

小白学习instrument之Activity Monitor

2019-11-29 09:20

关于JPush使用CPU占有率100%的情况,jpushcpu占有100%

  跑模拟器cpu占有率120%+,开始没注意,真机时候手机发烫的厉害,看了下CPU和线程

图片 1

 

 

  如图,发现占有率最高的是com.apple.CFSocket.private和org.hxhg.jpush.thread

  初步判断是极光推送的原因。ps 手机真心烫啊,感觉都闻到糊了得味道......

  去除极光之后一切正常。去极光官网找吧。。。

  图片 2

  好吧,更换最新SDK之后问题解决。

  

跑模拟器cpu占有率120%+,开始没注意,真机时候手机发烫的厉害,看了下CPU和线程 如图,发...

在之前的文章说过Activity Monitor,官方解释为:(活动监视器)显示器处理的CPU、内存和网络使用情况统计,记录由虚拟内存大小测量的系统负载。还是用一句大白话来说,Activity Monitor就很类似Windows的任务管理器,可以查看进程占用的内存,cpu的使用量......

 

理论上说的再好也没多大用处,只有实践操作才是王道,首先要从xcode中运行instrument,选择Activity Monitor 模板

启动Time Profile:Xcode ——> Product ——> Profile ——> Time Profile

图片 3

使用Time Profiler调试程序,能获取到整个应用程序运行中所消耗的时间分布和百分比

使用Time Profile前有两点需要注意的地方:

Activity Monitor打开之后是这个样子,所有都是空的

1、一定要使用真机调试

图片 4

在开始进行应用程序性能分析的时候,一定要使用真机。因为模拟器运行在Mac上,然而Mac上的CPU往往比iOS设备要快。相反,Mac上的GPU和iOS设备的完全不一样,模拟器不得已要在软件层面(CPU)模拟设备的GPU,这意味着GPU相关的操作在模拟器上运行的更慢,尤其是使用CAEAGLLayer来写一些OpenGL的代码时候,这就导致模拟器性能数据和用户真机使用性能数据相去甚远

2、应用程序一定要使用发布配置

现在这些都是空,那就要让我们丰富它的内容吧,在运行之前我们注意我们运行的设备和运行的app是否准备ok?这次我运行的设备我选择我的“初代土豪金”,(我也不想用我的宝贝研究啊,可以Activity Monitor它是监控整个设备的,如果选择使用ios模拟器,那么它监控的就会是你的mac,而我们的目的是手机app,那么只能牺牲我的“初代土豪金”)。

 

好像扯的有点多了,我们的目光继续转向Activity Monitor,当运行的设备和运行的app的准备好了,那么我们就开始运行Activity Monitor吧,点击左上角的红色圆点按钮,我的手机就自动这次运行的app"woniu.app",在手机上操作一会这个app,点击Activity Monitor左上角的暂停按钮,就得到下图:

调试时注意右下方选项

图片 5

Separate by Thread:每个线程应该分开考虑,只有这样你才能揪出那些大量占用CPU的"重"线程

Invert Call Tree:从上倒下跟踪堆栈,这意味着你看到的表中的方法,将已从第0帧开始取样,这通常你是想要的,只有这样你才能看到CPU中话费时间最深的方法,也就是说FuncA{FunB{FunC}} 勾选此项后堆栈以C->B-A 把调用层级最深的C显示在最外面

我们分析一下这些图的意思吧:

Hide System Libraries:勾选此项你会显示你app的代码,这是非常有用的。因为通常你只关心cpu花在你自己写的代码上的时间 而不是花在系统代码上的时间

%CPU:就是看不同进程对cup的占比,图片上有5个进程,我们主要关注woniu的cpu的占比,woniu的占比在20%左右,其他4个都是ios系统进程,不要太关注;

Flatten Recursion:递归函数, 每个堆栈跟踪一个条目

CPU Time:个人理解为cup运行时间,但底下的数值不知道是怎么计算,如果你知道的话,可以联系我;

Top Functions:一个函数花费的时间直接在该函数中的总和,以及在函数调用该函数所花费的时间的总时间。因此,如果函数A调用B,那么A的时间报告在A花费的时间加上B花费的时间,这非常有用,因为它可以让你每次下到调用堆栈时挑最大的时间数字,归零在你最耗时的方法

Real Memory Usage小白学习instrument之Activity Monitor。:和字面意思一样,就是看进程使用的内存量,这个两个图都是在说这个的,内容都是一样的,只是展示的方式不同罢了,我们关注一下蜗牛的内存使用量为45.48MB,目前来看占用还不是很多。

作者:然哥哥
链接:https://www.jianshu.com/p/080108c969e8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上图只是这些数据的大概结果我们可以去查看具体的数据,点击上图4个任意自己想要查看信息的图片,就会进入具体数据分析的页面(说是页面好像又不太像,暂时就这样吧),分析的结果有4种分析结果【Summary、Parent Child、Samples、Console】,我们一个个来分析

 

图片 6

先从Summary来分析吧(也就是上面这张图),我说一下这些参数的意思吧:

 

process id :进程id

切换到release状态

process name :进程名

设置选项   就可以看到黑色头像,可以看到代码具体某一行,消耗的时间

user name:用户名

Separate by Thread :每个线程被单独考虑。这能让你知道哪一个线程占用CPU最多。

%C P U:cpu占比

Invert Call Tree :选中该选项后,调用栈会自上至下显示。这通常是你需要的,因为你想知道CPU花费时间的那个最深的方法。

threads:线程

Hide System Libraries :选中该选项后,只有你自己app中出现的符号会被显示出来。通常选中该选项是有用的,因为你只关心CPU在你自己的代码中的哪一部分花费时间,你没法对系统库使用CPU做多少改变。

real mem:真正使用的内存

virtual mem:虚拟内存

architecture:架构

cpu time:CPU时间

sudden term:突如其来的项 (百度N/A就是不适应的意思)

参数的意思都说出了,就不要具体解释了吧,相信大家都很聪明,一看就知道什么意思^_^

接下来就是Parent Child,它的参数与Summary是一样的,内容也是一样的,就是多了点击进程1的地方多了一个隐藏功能

图片 7

接下了就是Samples,说一下参数的意思

total thread:总线程

physical memory wired:物理内存连接大小

physical memory active:活动的物理内存大小

physical memory Inactive:不活动的物理内存大小

physical memory used:使用的物理内存大小

图片 8

最后就是Console,它就比较简单,就是控制台的输出的一些日志

图片 9

还记得上面我说过为什么不拿模拟器的ios设备吗,我就附上一张模拟器运行的结果图,它检测的不是模拟器,而是整台mac。

图片 10

好了,Activity Monitor这个模板的内容就简单介绍到这了,再次申明,本系列文章只是表达自己对于instrument的见解,如有什么不对的地方,欢迎大家多多指点。

本文由永利集团登录网址发布于永利集团登录网址,转载请注明出处:小白学习instrument之Activity Monitor

关键词: