Android进程性能监控工具Honeybadger实现

Android进程性能监控工具Honeybadger实现

 

这是一个Android平台上的进程监控工具,可以实现对本机上安装的非系统app的进程的CPU利用率、PSS、网络上下行流量等数据进行准实时监控,并展示图形化结果(折线图)。

 

工具名称为:Honeybadger

百度移动下载地址:http://as.baidu.com/a/item?docid=6528832&pre=web_am_se

腾讯应用宝下载地址:

http://m4.qq.com/app/appDetails.htm?apkName=com.winstonwu.honeybadger&apkCode=1&dp=2&kword=&appId=10623688#

 

运行的效果图如下:

  

  



关键点总结:

1.进程CPU的利用率如何计算

       Android应用是以Linux用户的模式运行在Linux之上,Linux的/proc路径下有相关统计文件,如/proc/stat文件记录了系统自开机以来的CPU时间片使用情况,该文件的第一行记录即为总的CPU使用情况记录,而如果想要查看某一指定进程的时间片段使用情况,需要首先查询到该进程的pid(可以在运行app后,通过adb shell 查询),之后/proc/pid/stat文件中便记录了该进程的时间片使用情况。(更进一步,线程级的时间片使用情况记录在/proc/pid/task/tid/stat文件中)。文件的具体格式这里不多叙述,网上有很多介绍。

       某进程CPU使用率计算的方法就是:分别读出某一初始时间CPU总的时间片使用情况,以及该时间点某一进程的时间片使用情况,然后经过一个很短的时间片段,比如800毫秒,再一次读取CPU总的时间片使用情况以及该待测进程的时间片使用情况。那么在这800毫秒内该进程的CPU占用率可以通过该段时间内该进程时间片的增量与CPU总的时间片增量作商得到。

       分析CPU文件的类实现如下,pickOne方法用来实现一次取样:

importjava.io.BufferedReader;
import java.io.File;
importjava.io.FileReader;
importjava.io.IOException;
import java.lang.Thread;
 
public  class  ParseStatFile {
    private int pid;
   
    public ParseStatFile(int i){
       pid = i;
    }
   
    public float pickOne() throwsInterruptedException{
       try{
           CPU c1 = new CPU();
           CPUofProccp1 = new CPUofProc(pid);      
           c1.fillCPU();
           cp1.fillCPUofProc();
           Thread.sleep(800);
           CPU c2 = new CPU();
           CPUofProccp2 = new CPUofProc(pid);
           c2.fillCPU();
           cp2.fillCPUofProc();
           returncpuRateOfProc(c1,c2,cp1,cp2);
       }
       catch (Exception ex){
           return 0;
       }
      
    }
   
    public static StringgetStringFromFile(String filename){
       StringFileName=filename;
       StringfileStr = "";
        File myFile=new File(FileName);
        if(!myFile.exists())
        {
            System.err.println("Can't Find " + FileName);
        }
        try
        {
            BufferedReader in = new BufferedReader(newFileReader(myFile));
            String str;
        while ((str =in.readLine()) !=null)
        {
            fileStr+=str;
        }
            in.close();
        }
        catch (IOException e)
        {
            e.getStackTrace();
        }
        return fileStr;
    }
   
 
    private class CPU{
       int user =0;
       int nice =0;
       int system = 0;
       int idle = 0;
       int iowait=0;
       int irq = 0;
       int softtirq = 0;
       int stealstolen = 0;
       int guest = 0;
      
       public CPU(){
          
       }
      
       public void fillCPU(){
           StringfileName = "/proc/stat";
           StringstrOfFile = getStringFromFile(fileName); 
           String[]arr= strOfFile.split("\\s+");//@
           user = Integer.parseInt(arr[1]);
           nice = Integer.parseInt(arr[2]);
           system = Integer.pars
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值