【发布时间】:2013-02-15 09:23:12
【问题描述】:
当我使用 TOP 命令时,我可以得到以下信息:
shell@android:/ $ top -n 1
User 31%, System 10%, IOW 0%, IRQ 0%
User 346 + Nice 10 + Sys 120 + Idle 637 + IOW 6 + IRQ 0 + SIRQ 2 = 1121
PID PR CPU% S #THR VSS RSS PCY UID Name
481 1 26% S 89 762832K 81688K fg system system_server
1699 0 5% S 27 676472K 39092K fg u0_a72 wm.cs.systemmonitor
11243 0 3% S 28 673140K 29796K bg u0_a111 com.weather.Weather
13327 2 1% S 23 680472K 35844K bg u0_a83 com.rhmsoft.fm
659 0 1% S 17 663044K 33136K bg u0_a13 android.process.media
20260 1 0% R 1 1208K 508K shell top
我们可以看到CPU% 是四舍五入到整数,有什么方法可以让进程的CPU% 具有更高的精度?
-- 赏金澄清-- Alex
这个问题是针对安卓系统的,最好是针对没有root的设备。虽然 Android 为 Java 应用程序提供了高级分析技术,但用于本机代码 (C++) 的工具是有限的。 Android 上的 top 命令允许显示系统中运行的所有线程的统计信息,包括 Java 线程和 C++ 线程。我正在寻找有助于完成以下任务的答案:
我的应用在后台不活动时使用 2% 的 CPU,而它应该低于 0.1%。如果我运行 top -t,属于我的进程的所有 15 个线程都会得到 0%(一些线程是 Java 线程,例如 Main、UI 线程;其他是从不附加到 JVM 的 pthread) .我怎么能猜出哪个线程吃掉了电池?
我很高兴获得有关此意外活动的更多详细信息,Android 为 Java 线程提供了很好的帮助程序,例如 TraceView。任何有关本机代码工具的见解都将受到高度赞赏。
【问题讨论】:
-
不会有太大区别....
-
@MitchWheat:是的,它确实有所作为。否则,请帮我分析在后台使用 2% CPU 的应用程序。当我运行
top -t时,属于我的进程的所有 15 个线程都得到 0%。我怎么能猜出哪个线程吃掉了电池? -
user568109:共 15 个线程,均显示 0%。但它们加在一起提供了相当可观的 2%。一些线程是 Java,并且有 SDK 工具来监控它们的行为。其他的是 C++,我想从一个简单的
top命令中获得足够的 hibts 来帮助我找到消耗最多的 2 个。 -
@CommonsWare:当然,这是我的应用程序中的一个错误。但是能够解决问题的完整代码审查超出了我的能力范围。如果我能专注于一个线程,那将成为可能。
-
@Gene:请提供您评论内容的答案,它值得赏金。命令行是
adb shell cat /proc/${pid}/task/*/stat | awk -F\ '{print $1, $14}'(注意awk在主机上运行)。