前言
RSS(Resident Set Size)表示实际使用物理内存(包含共享库占用的内存)。
因为它包含了共享内存,所以他的意义不及PSS。所以现在查看内存使用情况一般参照PSS。
因此现在一般不使用getProcessState.bat,而是使用getMemoryState.bat
关于getMemoryState.bat的更多内容请参照《
Android内存泄露利器(内存统计篇)》
关于RSS和PSS的更多内容请参考《
Memory: VSS/RSS/PSS/USS
》
提取进程的RSS
文件:getProcessState.bat
@echo off
call config.bat
set processNameCol=9
set RSSCol=5
Setlocal enabledelayedexpansion
set path=%path%;%cd%\lib
set /a processNo=0
for %%i in (%
processName
%) do (
set /a processNo+=1
)
set /a cnt=0
set str=
if "%
processShortName
%"=="" (
set /a cnt=0
for %%i in (%processName%) do (
set str=%%i
set str=!str:.= !
call getSubStr "!str!" -1
set result=!getSubStr~result!
if !cnt!
EQU
0 (
set processShortName=!result!
) else (
set processShortName=!processShortName!;!result!
)
set /a cnt+=1
)
) else (
set /a cnt=0
for %%i in (%
processShortName
%) do (
set /a cnt=!cnt!+1
)
if
not
!cnt!
EQU
%processNo% (
echo the number of process Name is %processNo%
echo the number of process Short Name is !cnt!
echo they should be equal.Please check again!
exit 0
)
)
if not exist %rawDatadir% (
md %rawDatadir%
)
if not exist %outRoot% (
md %outRoot%
)
call genSerial
set serial=!genSerial~result!
set psFile=%rawDatadir%\ps%serial%.txt
adb shell "
ps -x
" >%psFile%
adb shell exit
set /a cnt=0
FOR /F "skip=1 tokens=%
RSSCol
%,%
processNameCol
%" %%i in (%psFile%) do (
set /a cnt=0
for %%a in (%processName%) do (
if "%%a"=="%%j" (
call getSubStr "%
processShortName
%" !cnt!
set result=!getSubStr~result!
set statFile=%outRoot%\%
statFilePrefix
%_!result!.txt
if exist !statFile! (
>>!statFile! set/p=,%%i<nul
) else (
>>!statFile! set/p=%%i<nul
)
)
set /a cnt=!cnt!+1
)
)
echo success!
endlocal
执行一次 getProcessState.bat来从手机提取进程的RSS,输出到一个以进程名命名的文本文件,以便在excel中生产图表文件。
注意
:需要把bat库genSerial.bat,getSubStr.bat放在子目录lib中。
关于它们的更多内容请参考《
getSubStr》,《genSerial》
关于更多的Android内存泄露利器请阅读《
Android内存泄露利器(Hprof篇)》,《
Android内存泄露利器(内存统计篇)
》,
《
Android内存泄露利器(全自动篇)
》