
背景
如何查看当前进程的线程数量。 比如一个app发现ui线程的调度一直在Runnable(待调度执行)中,而不是出于Running,那么就要看这个时候CPU的每个核心在跑什么,频率怎么样。 比如频率很高,每个核心吃满了,但是ui线程依然Runnable,那么就得看其他线程在干嘛了。
adb shell
ps -A
//查看全部进程拿到pid之后
ursa:/ $ ps -T -A | grep 26644
u0_a184      26644 26644   672 5311996 139720 0                   0 S module_logutils
u0_a184      26644 26650   672 5311996 139720 0                   0 S Jit thread pool
u0_a184      26644 26655   672 5311996 139720 0                   0 S Signal Catcher
u0_a184      26644 26661   672 5311996 139720 0                   0 S ADB-JDWP Connec
u0_a184      26644 26663   672 5311996 139720 0                   0 S HeapTaskDaemon
u0_a184      26644 26664   672 5311996 139720 0                   0 S ReferenceQueueD
u0_a184      26644 26665   672 5311996 139720 0                   0 S FinalizerDaemon
u0_a184      26644 26666   672 5311996 139720 0                   0 S FinalizerWatchd
u0_a184      26644 26667   672 5311996 139720 0                   0 S Binder:26644_1
u0_a184      26644 26668   672 5311996 139720 0                   0 S Binder:26644_2
u0_a184      26644 26680   672 5311996 139720 0                   0 S Binder:26644_3
u0_a184      26644 26693   672 5311996 139720 0                   0 S Profile Saver
u0_a184      26644 26695   672 5311996 139720 0                   0 S RenderThread
u0_a184      26644 26698   672 5311996 139720 0                   0 S Binder:intercep
u0_a184      26644 26699   672 5311996 139720 0                   0 S magnifier pixel
u0_a184      26644 26700   672 5311996 139720 0                   0 S chancesThread1
u0_a184      26644 26701   672 5311996 139720 0                   0 S pool-2-thread-1
u0_a184      26644 26704   672 5311996 139720 0                   0 S AsyncTask #1
u0_a184      26644 27040   672 5311996 139720 0                   0 S chancesThread2
ursa:/ $如果想一直观察当前app的线程数量,可以通过脚本来做。 比如你已经知道进程的pid,还有他名字。
#!/bin/bash
for((i=1;i<=10000;i++));
do
##替换成需要做的动作
sleep 1 #睡眠一秒
adb shell ps -T | grep u0_a208 | wc -l
#我打印了命令,如果你不需要,可以忽略
#u0_a208 pid前面的user
echo 'adb shell ps -T | grep u0_a208 | wc -l'; 
done
这样就可以观察线程数目的变化了。比如你进入某个页面的时候,看看线程有没有变化。通过这样的简单观察,如果发现线程数目一直增加,那么就是有问题。长时间下去可能会oom。即使不oom也有可能产生卡顿或者ANR。因为线程越来越多,就意味着CPU到时候忙不过来,调度自然跟不上了。
还有一个方式是,打开as,打开profiler,点击CPU,进去之后也可以实时看到线程数目,CPU使用率,等等详细信息。
有个头疼的事情,我怎么知道这些线程是哪里创建的或者触发的,比如进入某个页面后,我怎么快速定位线程的创建和调用呢,找到线程的使用者呢。如果你知道,赶紧来评论区告诉我。
如果我有方法,我会补充这个文章。这一篇属于残次品。
版权说明 
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
 
 
 
  