背景
這兩天在排查自動化測試平台中,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 命令,定位得非常清晰了。 你的胸懷是被誰撐大的?
有句話說 乙個人的成就有多大,取決於他的胸懷有多大 自從帶團隊這幾年,對這句話的感受尤為深切。組織行為學裡面有句話說 屁股決定大腦 就是本位主義,人的大腦很多時候喜歡被他的屁股 個人立場 控制。無論工作熱情有多高,能力有多強,沒有寬闊的胸懷,很難走到更高的管理崗位,俗話說 性格決定命運 與自己不喜歡...
你的胸懷是被誰撐大的?
有句話說 乙個人的成就有多大,取決於他的胸懷有多大 自從帶團隊這幾年,對這句話的感受尤為深切。組織行為學裡面有句話說 屁股決定大腦 就是本位主義,人的大腦很多時候喜歡被他的屁股 個人立場 控制。無論工作熱情有多高,能力有多強,沒有寬闊的胸懷,很難走到更高的管理崗位,俗話說 性格決定命運 與自己不喜歡...
adb命令檢視apk資訊, adb啟動你的apk
1.用adb獲得手機裡面某個apk的應用資訊 版本資訊 adb shell dumpsys package com.sy.a268 2.列出所有 adb shell dumpsys 3.用adb啟動apk adb shell am start n com.sy.a268 com.sy.a268.ma...