adb进程是被谁启动的?

背景

这两天在排查自动化测试平台中,adb.exe 开启过多的问题。(200个)
这是一个很糟糕的表现,当客户端的连接数过多时,会对 Android 的 adbd 带来过多的 socket 连接,进而影响系统性能。

开始排查

仅仅通过在开启 adb 的位置加 log,并不能取得什么效果。程序里用的是 Runtime.exec 去执行 adb 命令,通过单独执行这样的代码,测试半个小时,未见 adb.exe 增多的情况。从测试平台的代码上,已经没有什么大的突破口了

找到突破口

于是从 windows 侧寻找突破点,毕竟进程是在 windows 上处于未关闭的状态,那么是否有相关的 windows 工具能够检查某个进程的?是的,使用 windows 命令 tasklist 查看当前的 adb 进程

C:\>tasklist |findstr adb.exe
adb.exe                      19136 Console                    1     13,572 K
adb.exe                      16380 Console                    1      9,308 K
adb.exe                       6868 Console                    1      9,316 K

虽然能够看到个数,但是它究竟是谁启动的,怎么启动的,一无所获。这给排查带来了阻碍。

再尝试有没有别的指令,能够获取更详细的信息?没错,就是 wmic,它简直比 tasklist 强大 100倍。

C:\>wmic process where name="adb.exe" get /format:value


Caption=adb.exe
CommandLine=adb logcat
CreationClassName=Win32_Process
CreationDate=20190724151227.904509+480
CSCreationClassName=Win32_ComputerSystem
CSName=CHJ-THINKPAD-HW
Description=adb.exe
ExecutablePath=D:\android-sdk\platform-tools\adb.exe
ExecutionState=
Handle=14980
HandleCount=218
InstallDate=
KernelModeTime=389062500
MaximumWorkingSetSize=1380
MinimumWorkingSetSize=200
Name=adb.exe
OSCreationClassName=Win32_OperatingSystem
OSName=Microsoft Windows 10 专业版|C:\WINDOWS|\Device\Harddisk1\Partition1
OtherOperationCount=584392
OtherTransferCount=63483134
PageFaults=218485
PageFileUsage=9300
ParentProcessId=1700
PeakPageFileUsage=15612
PeakVirtualSize=175087616
PeakWorkingSetSize=12400
Priority=8
PrivatePageCount=9523200
ProcessId=14980
QuotaNonPagedPoolUsage=24
QuotaPagedPoolUsage=215
QuotaPeakNonPagedPoolUsage=286
QuotaPeakPagedPoolUsage=216
ReadOperationCount=1
ReadTransferCount=1732
SessionId=1
Status=
TerminationDate=
ThreadCount=6
UserModeTime=103906250
VirtualSize=161447936
WindowsVersion=10.0.16299
WorkingSetSize=11182080
WriteOperationCount=764
WriteTransferCount=775

以上命令输出了关于 adb.exe 这个进程比较详细的信息,发现有两行非常管用
CommandLine=adb logcat 和 ExecutablePath=D:\android-sdk\platform-tools\adb.exe

记录了此进程是通过什么命令执行以及它的启动路径。于是我们据此就可以排查,是什么命令未正常关闭,从而更有针对性的去解决 adb 开启过多的问题。

该命令可以进一步简化我们只需要的两条关键信息

C:\>wmic process where name="adb.exe" get CommandLine,ExecutablePath
CommandLine                                        ExecutablePath
adb -L tcp:5037 fork-server server --reply-fd 596  D:\asset\android-sdk\platform-tools\adb.exe
adb  logcat                                        D:\Tools\android-sdk-windows\platform-tools\adb.exe

第一条是 asset 目录下开启的 adb server,第二条 Tools 目录下 adb client 执行的 adb logcat 命令,定位得非常清晰了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值