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%

-- 報奨金に関する説明 -- アレックス

質問は Android システムに関するものであり、ルート化されていないデバイスに関するものであることが望ましいです。Android は Java アプリケーション用の高度なプロファイリング手法を提供しますが、ネイティブ コード (C++) 用のツールは限られています。Android のtopコマンドを使用すると、システムで実行されているすべてのスレッド (Java スレッドと C++ スレッドの両方) の統計を表示できます。次のクエストに役立つ回答を探しています。

私のアプリは、バックグラウンドで非アクティブなときに 2% の CPU を使用しますが、それは 0.1% 未満である必要があります。を実行するtop -tと、自分のプロセスに属する 15 のスレッドすべてで 0% になります (一部のスレッドは、メインの UI スレッドなどの Java スレッドであり、他のスレッドは JVM に接続されない pthread です)。どのスレッドがバッテリーを消費するかを推測するにはどうすればよいですか?

この予想外のアクティビティについてさらに詳しく知りたいと思います。Androidには、Java スレッド用のTraceViewなどの優れたヘルパーが用意されています。ネイティブ コード用のツールに関する洞察は高く評価されます。

4

4 に答える 4

3

これを試して:

ps -eo pcpu,pid,user,args | sort -r -k1 | less 

%CPU   PID USER     COMMAND
 9.0  2721 user   bash
 1.4   956 root     ...
 0.5  2212 user   ...

編集:

adb shell と busybox を使用できます ( http://www.busybox.net/downloads/BusyBox.html )

adb シェル ビジーボックス トップ

c:\ adb push busybox /system/bin
c:\ adb shell
# busybox top 

CPU:  2.3% usr  3.1% sys  3.9% nic 90.5% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 1.06 1.66 10.63 1/589 8048
←[7m  PID  PPID USER     STAT   VSZ %MEM CPU %CPU COMMAND←[0m
31619  2180 10112    S     217m 67.0   0  3.8 com.mgeek.android.DolphinBrowser.B

 2232  2180 1000     S     551m169.6   0  2.6 system_server
 8038  8037 0        R     2068  0.6   0  0.8 busybox top
 2178     1 0        S    11092  3.3   0  0.6 /system/bin/drexe
 6812  2180 10104    S     199m 61.2   0  0.5 android.tether
 2291  2180 1001     S     324m 99.8   0  0.3 com.android.phone
 2308  2180 10006    S     325m100.0   0  0.1 com.sec.android.app.dialertab
 2177     1 1001     S     9624  2.8   0  0.1 /system/bin/rild
    5     2 0        SW<      0  0.0   0  0.1 [events/0]
30087  2180 10022    S     358m110.4   0  0.0 com.samsung.vvm
 2304  2180 10006    S     311m 96.0   0  0.0 com.sec.android.app.twlauncher
16110  2180 10006    S     296m 91.3   0  0.0 android.process.acore
 2445  2180 10006    S     272m 83.8   0  0.0 com.sec.android.provider.logsprovi

 8064  2180 10002    S     238m 73.4   0  0.0 com.google.process.gapps
31537  2180 10037    S     227m 69.9   0  0.0 com.google.android.gm
 2288  2180 10048    S     221m 68.1   0  0.0 com.swype.android.inputmethod
 2285  2180 10013    S     215m 66.3   0  0.0 com.tat.livewallpaper.aurora
30664  2180 10011    S     213m 65.8   0  0.0 com.android.email
31191  2180 10099    S     209m 64.4   0  0.0 com.sirma.mobile.bible.android
 2377  2180 10087    S     207m 63.9   0  0.0 android.tts

(ここから撮影)

于 2013-06-27T08:00:22.987 に答える
2

別のスレッドからこの情報を取得しました:

3) CPU 情報の取得

~$ adb shell dumpsys cpuinfo

出力:

負荷: 0.08 / 0.4 / 0.64 CPU 使用率 42816ms から 34683ms 前: system_server: 1% = 1% ユーザー + 0% カーネル / 障害: 16 マイナー kdebuglog.sh: 0% = 0% ユーザー + 0% カーネル / 障害: 160マイナー tiwlan_wq: 0% = 0% ユーザー + 0% カーネル usb_mass_storag: 0% = 0% ユーザー + 0% カーネル pvr_workqueue: 0% = 0% ユーザー + 0% カーネル +sleep: 0% = 0% ユーザー + 0% カーネル+sleep: 0% = 0% ユーザー + 0% カーネル TOTAL: 6% = 1% ユーザー + 3% カーネル + 0% irq

編集:

次のコマンドを試すこともできます。echo $(adb shell ps | grep com.android.phone | awk '{ system("adb shell cat /proc/" $2 "/stat");}' | awk '{print $14+$15;}')

また:

top を使用:これにより、CPU統計が表示されます top -b -n 1 |grep ^Cpu

using ps: これにより、各プロセスの CPU 使用率が表示されます。 ps -eo pcpu,pid,user,args | sort -r -k1 | less

EDIT2:

あなたのコメントと報奨金の説明 (どのスレッドがバッテリーを消費しているかをどうやって推測できますか?) に関連して、興味深いページを見つけました。

http://ziyang.eecs.umich.edu/projects/powertutor/

そこに述べられているように:

PowerTutor を使用して、アプリケーションの消費電力を監視できます。

これをインスタンスで試して、要件を満たしているかどうかを確認してください。

最終編集:

developer.android.com サイトの Systrace ドキュメントを確認してください。

http://developer.android.com/tools/debugging/systrace.html http://developer.android.com/tools/help/systrace.html

すでにお試しでしたら申し訳ありませんが、それはパフォーマンスを測定するための1つの具体的な方法です。

于 2013-06-27T12:09:25.207 に答える