gpt4 book ai didi

java - Android 应用程序 CPU 使用率跳升至 50-100%,跟踪仅显示 JDWP

转载 作者:行者123 更新时间:2023-11-30 00:50:02 25 4
gpt4 key购买 nike

我的应用程序在后台运行一段时间后手机开始变慢。

在我记录 cpu 使用率后,跟踪文件显示 JDWP 占用了 JDWP 线程上 99% 的 cpu 使用率,这是我在跟踪文件中看到的唯一线程。

JDWP(谷歌称其为 Java Debug Wire Protocol)是否可能占用如此多的 CPU,或者我的跟踪文件有问题?在 CPU 使用率跃升后,手机开始运行变慢并变热,所以我很确定使用数据没问题。

这里有 2 个只显示 JDWP 的跟踪文件:
https://drive.google.com/file/d/0B9MtungcpihwZnl0RFIwanktMEk/view?usp=sharing

这是一张专辑前中后的轨迹记录:
http://imgur.com/a/rOZ4g

命令 adb shell top -m 5 的输出如下:
http://pastebin.com/2FJNVvZA

最佳答案

JDWP 线程不应该运行太多;它是处理调试器命令的线程,包括您的 IDE 自动执行的一些操作。

我不记得曾经见过它占用大量 CPU 时间,但我想如果您(或者更可能是某些工具)正在运行大量命令,它可能会发生。

否则,您可能在虚拟机 (ART) 或 IDE/工具中发现了错误。

如果你想分享跟踪文件,我不介意看一下。

更新 1:我查看了这些文件。实际上,除了 JDWP 线程之外没有其他线程。但是,它并没有使用大量 CPU——将光标​​悬停在顶部的“JDWP”上。阻止并检查 Wallclock 时间 (4.344s) 与 CPU 时间 (0.006s)。您还可以在顶部的下拉框中切换到“线程时间” View 而不是“挂钟时间”。

这是其中一个跟踪文件的人类可读部分:

*version
3
data-file-overflow=false
clock=dual
elapsed-time-usec=4345915
num-method-calls=410
clock-call-overhead-nsec=3808
vm=dalvik
*threads
1 main
14 Thread-7700
13 Thread-7699
12 Thread-7698
11 FileObserver
10 Binder_2
9 Binder_1
8 FinalizerWatchdogDaemon
7 FinalizerDaemon
6 ReferenceQueueDaemon
5 Compiler
4 JDWP
3 Signal Catcher
2 GC
*methods
0x6da675c0 android/ddm/DdmHandleProfiling handleChunk (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk; DdmHandleProfiling.java -1
0x6da673c0 android/ddm/DdmHandleProfiling handleMPRQ (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk; DdmHandleProfiling.java -1
0x6da67430 android/ddm/DdmHandleProfiling handleMPSE (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk; DdmHandleProfiling.java -1
0x6da67468 android/ddm/DdmHandleProfiling handleMPSS (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk; DdmHandleProfiling.java -1
0x6d8b4ca0 java/nio/ByteBuffer order (Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer; ByteBuffer.java 635
0x6d8b4410 java/nio/ByteBuffer <init> (ILjava/nio/MemoryBlock;)V ByteBuffer.java 116
0x6d8b44f0 java/nio/ByteBuffer wrap ([BII)Ljava/nio/ByteBuffer; ByteBuffer.java 108
0x6d8dd658 java/util/HashMap get (Ljava/lang/Object;)Ljava/lang/Object; HashMap.java -1
0x6d918008 java/util/Arrays checkOffsetAndCount (III)V Arrays.java 1731
0x6d9913a8 org/apache/harmony/dalvik/ddmc/ChunkHandler wrapChunk (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Ljava/nio/ByteBuffer; ChunkHandler.java 80
0x6d9807d0 android/os/Debug getMethodTracingMode ()I Debug.java -1
0x6d981100 android/os/Debug startMethodTracingDdms (IIZI)V Debug.java -1
0x6d9811a8 android/os/Debug stopMethodTracing ()V Debug.java -1
0x6da67040 android/ddm/DdmHandleHeap handleChunk (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk; DdmHandleHeap.java -1
0x6da66e78 android/ddm/DdmHandleHeap handleHPIF (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk; DdmHandleHeap.java -1
0x6d8be8d0 java/lang/Integer equals (Ljava/lang/Object;)Z Integer.java 208
0x6d8be940 java/lang/Integer hashCode ()I Integer.java 302
0x6d8be190 java/lang/Integer <init> (I)V Integer.java 88
0x6d8be740 java/lang/Integer valueOf (I)Ljava/lang/Integer; Integer.java 706
0x6d8b5240 java/nio/Buffer <init> (IILjava/nio/MemoryBlock;)V Buffer.java 97
0x6dc2d778 org/apache/harmony/dalvik/ddmc/DdmVmInternal heapInfoNotify (I)Z DdmVmInternal.java -2
0x6d8b5ec8 org/apache/harmony/dalvik/ddmc/Chunk <init> (I[BII)V Chunk.java 45
0x6d9d22a8 java/nio/ByteArrayBuffer get ()B ByteArrayBuffer.java 151
0x6d9d2000 java/nio/ByteArrayBuffer <init> (I[BIZ)V ByteArrayBuffer.java 41
0x6d9d2038 java/nio/ByteArrayBuffer <init> ([B)V ByteArrayBuffer.java -1
0x6d8b5fe0 org/apache/harmony/dalvik/ddmc/DdmServer dispatch (I[BII)Lorg/apache/harmony/dalvik/ddmc/Chunk; DdmServer.java 143
0x6d8b7128 dalvik/system/VMDebug getMethodTracingMode ()I VMDebug.java -2
0x6d8b7550 dalvik/system/VMDebug startMethodTracingDdms (IIZI)V VMDebug.java 182
0x6d8b76d8 dalvik/system/VMDebug stopMethodTracing ()V VMDebug.java -2
0x6d8ba1b8 java/lang/Number <init> ()V Number.java 33
*end

如您所见,其他线程至少出现在 header 中。

header 不包含对非系统方法的引用。

我不会说您不可能发现一些奇怪的错误——但我认为您的应用此时更有可能完全闲置,除了通过 JDWP 回答跟踪命令的小工作外,并且JDWP-only trace 让你有点困惑。

不过,您的标题提到“50-100% 的 CPU 使用率”,这表明某些东西正在运行。我不清楚你从哪里得到这些数字——也许它们包括一切,而不仅仅是你的应用程序?尝试运行 adb shell top -m 5 找出您系统中的 CPU 使用率最高的用户。

关于java - Android 应用程序 CPU 使用率跳升至 50-100%,跟踪仅显示 JDWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41208828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com