【问题标题】:Is it possible to measure "CPU time" an app uses?是否可以测量应用程序使用的“CPU 时间”?
【发布时间】:2014-03-08 07:35:25
【问题描述】:

我正在编写一个 Android 应用程序,它会在安装它的设备上提供统计信息,并且想知道是否可以确定以下指标。

CPU 为特定进程服务所花费的时间。我正在测试的设备有一个 4 核处理器,无论天气如何,我都想花时间处理相关进程是在前台还是后台。使用 top 可以得到进程占用的 CPU 百分比,有没有办法确定时间(以秒或时钟周期为单位)?

谢谢

【问题讨论】:

    标签: android performance cpu-usage


    【解决方案1】:

    看看ps 命令。它具有格式说明符,即提供 CPU 和挂起时间的字段/列。

    例如 Android 的 cputime:

    ps -x
    
    will yield something that looks like this
    u0_a16    18214 17002 743644 18104 ffffffff 00000000 S com.android.location.fused (u:10, s:13)
    

    其中 u:10 和 s:13 代表 CPU 在进程上花费的时间(来源:http://codeseekah.com/2012/10/21/android-shell-tricks-ps/

    我制作了一个用于收集系统统计信息的 Linux 脚本,您可以在此处查看:https://gist.github.com/izmailoff/8923008

    【讨论】:

    • 感谢您的回答 Aleksey,但是当我从我设置的终端运行 ps 时,我没有得到 cputime(很遗憾)。看起来该命令是为了 Android 的目的而被剥离的。这是我运行它时看到的。 shell@android:/sys/class $ ps USER PID PPID VSIZE RSS WCHAN PC NAME
    • 我的午餐时间,所以我很快就会回来,但在我走之前,我发现了一个可能对其他想知道的人有用的链接。根据codeseekah.com/2012/10/21/android-shell-tricks-ps,您可以使用“ps -x”获取进程的用户和系统时间
    • 我现在无法访问 android 但也许此信息会在 /proc/ 中可用
    • 是否可以获得大于 (#cores)*(elapsed wall time) 的 cpu 时间?
    • 我不知道。从技术上讲,这应该是不可能的,但有时这些事情不会仅仅因为不准确而加起来。顺便说一句,这是线程数,而不是内核数。
    【解决方案2】:

    gprof 实际上可能是一个很好的工具,如果你可以使用的话。

    它只对 CPU 时间进行采样,并且它的采样通常是每 10 毫秒一次。

    所以,看看它得到了多少样本,不管它们属于什么函数,乘以 10,这就是你的程序使用了多少毫秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      相关资源
      最近更新 更多