Monkey出現SystemServer 記憶體佔用高達200MB以上,長時間等待無降低
5臺手機有一臺保持在280M佔用沒有降下來,其他4臺都降到150M左右;
沒有降下來的手機其佔用增長,主要體現在java heap和native heap上面。
XXXX:/ # cat /d/ion/ion_mm_heap | grep Splash
0xc2552cc0 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 139585 -1429625308 -1390939724 Splash Screen com.transsion.filemanagerx#1
0xc2a17480 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 38970 -1419727932 -1311247948 Splash Screen com_ogle.android.apps.nbu.files#0
0xc306a9c0 4239360 0 2 1 3 ca00000 0 3 10 347( 347) [email protected] 930 80076 -1414703676 -1309183564 Splash Screen com_ogle.android.apps.nbu.files#1
0xc33e9f00 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 130010 -1428007292 -1396797004 Splash Screen com_ogle.android.apps.nbu.files#1
0xc4376d80 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 142932 -1430306588 -1396797004 Splash Screen com.transsion.filemanagerx#0
0xc49b33c0 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 115609 -1426504252 -1397837388 Splash Screen com.transsion.filemanagerx#0
0xc516cd80 4239360 0 2 1 -1 5600000 0 3 10 347( 347) [email protected] 930 179495 -1421249532 -1311247948 Splash Screen com.transsion.deskclock#1
0xc51f00c0 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 138069 -1423819516 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#1
0xc5ad06c0 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 95400 -1410535580 -1390939724 Splash Screen com.android.chrome#0
0xc6883840 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 172509 -1419610780 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#0
0xc6e8f900 4239360 0 2 1 3 af00000 0 3 10 347( 347) [email protected] 930 139585 -1429624508 -1390939724 Splash Screen com.transsion.filemanagerx#1
0xc77c03c0 4239360 0 2 1 -1 6000000 0 3 10 347( 347) [email protected] 930 109328 -1427459228 -1390939724 Splash Screen com.android.contacts#0
0xc780e540 4239360 0 2 1 -1 600000 0 3 10 347( 347) [email protected] 930 35384 -1414793148 -1397837388 Splash Screen com.transsion.filemanagerx#0
0xc87a0b40 4239360 0 2 1 -1 f300000 0 3 10 347( 347) [email protected] 930 115609 -1427325180 -1311247948 Splash Screen com.transsion.filemanagerx#0
0xc8bcf9c0 4239360 0 2 1 -1 2900000 0 3 10 347( 347) [email protected] 930 95400 -1410545980 -1390939724 Splash Screen com.android.chrome#0
0xca7b0c00 4239360 0 2 1 3 2e00000 0 3 10 347( 347) [email protected] 930 174398 -1408220892 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#0
0xca9e1b40 4239360 0 2 1 -1 4800000 0 3 10 347( 347) [email protected] 930 38970 -1419726172 -1311247948 Splash Screen com_ogle.android.apps.nbu.files#0
0xcb396900 4239360 0 2 1 3 e800000 0 3 10 347( 347) [email protected] 930 146290 -1428110588 -1390939724 Splash Screen com.transsion.deskclock#1
0xcbc14480 4239360 0 2 1 -1 5b00000 0 3 10 347( 347) [email protected] 930 49633 -1414118460 -1309183564 Splash Screen com.transsion.filemanagerx#0
0xcc1aed80 4239360 0 2 1 3 9a00000 0 3 10 347( 347) [email protected] 930 138069 -1423816956 -1309183564 Splash Screen com_ogle.android.apps.nbu.files#1
0xcc391600 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 31707 -1420034396 -1309183564 Splash Screen com_ogle.android.apps.nbu.files#0
0xcd65e600 4239360 0 2 1 3 7c00000 0 3 10 347( 347) [email protected] 930 71512 -1388538620 -1390939724 Splash Screen com_ogle.android.apps.nbu.files#1
0xd0611c00 4239360 0 2 1 3 8600000 0 3 10 347( 347) [email protected] 930 130010 -1428006172 -1396797004 Splash Screen com_ogle.android.apps.nbu.files#1
0xd331a000 4239360 0 2 1 -1 5100000 0 3 10 347( 347) [email protected] 930 124664 -1427068284 -1396797004 Splash Screen com.android.chrome#0
0xd37c6840 4239360 0 2 1 -1 cf00000 0 3 10 347( 347) [email protected] 930 142932 -1430303388 -1397837388 Splash Screen com.transsion.filemanagerx#0
0xd46f5180 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 31707 -1393090204 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#0
0xd47b6540 4239360 0 2 1 -1 9400000 0 3 10 347( 347) [email protected] 930 191145 -1407658140 -1390939724 Splash Screen com.android.documentsui#1
0xd51c1780 4239360 0 2 1 3 a400000 0 3 10 347( 347) [email protected] 930 192949 -1407646460 -1396797004 Splash Screen com_ogle.android.apps.nbu.files#1
0xd5369780 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 51034 -1420051772 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#1
0xd571a900 4239360 0 2 1 3 c500000 0 3 10 347( 347) [email protected] 930 192949 -1412016764 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#1
0xd5769180 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 109328 -1427457628 -1311247948 Splash Screen com.android.contacts#0
0xd6664c00 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 35384 -1420228860 -1311247948 Splash Screen com.transsion.filemanagerx#0
0xd83f3600 4239360 0 2 1 3 7700000 0 3 10 347( 347) [email protected] 930 51034 -1414126780 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#1
0xd866d0c0 4239360 0 2 1 3 de00000 0 3 10 347( 347) [email protected] 930 146290 -1426112348 -1311247948 Splash Screen com.transsion.deskclock#1
0xd90b09c0 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 179495 -1408206012 -1311247948 Splash Screen com.transsion.deskclock#1
0xd9e92a80 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 174398 -1425692124 -1396797004 Splash Screen com_ogle.android.apps.nbu.files#0
0xda4b7e40 4239360 0 2 1 -1 c00000 0 3 10 347( 347) [email protected] 930 31707 -1414299964 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#0
0xda81d900 4239360 0 2 1 3 e300000 0 3 10 347( 347) [email protected] 930 146290 -1426115708 -1311247948 Splash Screen com.transsion.deskclock#1
0xdabe33c0 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 49633 -1389602940 -1309183564 Splash Screen com.transsion.filemanagerx#0
0xdb493e40 4239360 0 2 1 -1 3800000 0 3 10 347( 347) [email protected] 930 36680 -1414996796 -1397837388 Splash Screen com.transsion.filemanagerx#1
0xdba06b40 4239360 0 2 1 -1 3300000 0 3 10 347( 347) [email protected] 930 36680 -1420918044 -1309183564 Splash Screen com.transsion.filemanagerx#1
0xdc786240 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 191145 -1407659580 -1390939724 Splash Screen com.android.documentsui#1
0xdcbdbc00 4239360 0 2 1 -1 6c00000 0 3 10 347( 347) [email protected] 930 118533 -1427061084 -1396797004 Splash Screen com_ogle.android.apps.nbu.files#1
0xdd090240 4239360 0 2 1 -1 7100000 0 3 10 347( 347) [email protected] 930 118533 -1427388860 -1311247948 Splash Screen com_ogle.android.apps.nbu.files#1
0xdd7dbcc0 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 71512 -1388541180 -1396797004 Splash Screen com_ogle.android.apps.nbu.files#1
0xddec5000 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 124664 -1426597916 -1396797004 Splash Screen com.android.chrome#0
0xde7b5480 4239360 0 2 1 -1 b400000 0 3 10 347( 347) [email protected] 930 172509 -1419614620 -1397837388 Splash Screen com_ogle.android.apps.nbu.files#0
0xdeabf780 4239360 0 2 1 -1 0 0 3 10 347( 347) [email protected] 930 80076 -1387374524 -1390939724 Splash Screen com_ogle.android.apps.nbu.files#1
XXXXX:/ # dumpsys window | grep com_ogle
Monkey過程中存在大量的ion buffer洩露
目前遇到的2中情況的佔用高的情況:
1, java/native heap佔用增長較大(目前出現一臺);
2, EGL記憶體佔用增長較大(該情況復現概率相當高
EGL記憶體洩露過程分析如下:
該洩露,主要體現在Splash screen ion buffer的洩露,該buffer是在app啟動過程中show start window(在app visible 之前蓋在上面的一張snapshot,該snapshot 是app上次退出時的最後一幀截圖)時申請的graphic buffer,其申請釋放流程如下:
1, activity 啟動時,wms這邊為app 建立一個start window,該window對應到一個surface,並且draw 上一幀頁面(該app之前退出的截圖),draw的過程中,會向surfaceFlinger申請相應的graphicbuffer(具體數量根據draw的情況定);
2,activity draw了第一幀自己的UI介面後,通知wms 移除之前的start window,其相應的surface layer也會被銷燬,Graphic buffer引用也會釋放。
問題出現的情景是:
同一個app,在相當短的時間內,啟動了2次不同的activity(100ms+),使上面的流程1走了2次,並且第二次覆蓋了第一次的資料,而在流程2裡面只remove了後一次的start window,致使洩露一個surface,其相應的graphic buffer也會一直被systemServer引用,得不到釋放。
Line 81455: 10-26 20:58:46.198 917 1771 V WindowManager: setAppStartingWindow: token=Token{32fb4a4 ActivityRecord{8f52c36 u0 com.transsion.filemanagerx/.FileManagerSelectPathActivity t9178 f}} pkg=com.transsion.filemanagerx transferFrom=null newTask=false taskSwitch=true processRunning=false allowTaskSnapshot=true
Line 81458: 10-26 20:58:46.198 917 1771 V WindowManager: Creating SplashScreenStartingData
Line 81566: 10-26 20:58:46.215 917 1091 V WindowManager: setAppStartingWindow: token=Token{3db451 ActivityRecord{89e96db u0 com.transsion.filemanagerx/.MainFilemanagerActivity t9178}} pkg=com.transsion.filemanagerx transferFrom=null newTask=false taskSwitch=false processRunning=false allowTaskSnapshot=true
Line 81570: 10-26 20:58:46.216 917 1091 V WindowManager: Creating SplashScreenStartingData
Line 82342: 10-26 20:58:46.324 917 998 V WindowManager: Added starting AppWindowToken{e3f0ee6 token=Token{32fb4a4 ActivityRecord{8f52c36 u0 com.transsion.filemanagerx/.FileManagerSelectPathActivity t9178}}}: startingWindow=Window{98a5005 u0 Splash Screen com.transsion.filemanagerx} [email protected]68
Line 83271: 10-26 20:58:46.416 917 1091 V WindowManager: Moving existing starting Window{98a5005 u0 Splash Screen com.transsion.filemanagerx} from AppWindowToken{e3f0ee6 token=Token{32fb4a4 ActivityRecord{8f52c36 u0 com.transsion.filemanagerx/.FileManagerSelectPathActivity t9178}}} to AppWindowToken{e2eeccb token=Token{3db451 ActivityRecord{89e96db u0 com.transsion.filemanagerx/.MainFilemanagerActivity t9178}}}
Line 83338: 10-26 20:58:46.421 917 998 V WindowManager: Added starting AppWindowToken{e2eeccb token=Token{3db451 ActivityRecord{89e96db u0 com.transsion.filemanagerx/.MainFilemanagerActivity t9178}}}: startingWindow=Window{98a5005 u0 Splash Screen com.transsion.filemanagerx} [email protected]3c
Line 83872: 10-26 20:58:46.547 917 935 V WindowManager: setAppStartingWindow: token=Token{3db451 ActivityRecord{89e96db u0 com.transsion.filemanagerx/.MainFilemanagerActivity t9178}} pkg=com.transsion.filemanagerx transferFrom=null newTask=false taskSwitch=false processRunning=false allowTaskSnapshot=true
如上log,另一種導致Splash surface洩露case如下:
1,同一個app裡面的不同2個activity其他相當靠近;
2,第一個activity通過scheduleAddStartingWindow通過非同步的方式,去處理start window的操作;
3,第二個activity啟動時,此時第一個activity還處於hidden狀態,在transferStartingWindow裡面沒有任何動作,返回false,同樣也會去呼叫scheduleAddStartingWindow通過非同步的方式處理start window操作;
4,第一個activity setVisible時,會觸發transferStartingWindow呼叫,並且將第一個activity的start window複用給第二個activity 的start window,由於步驟3中已經非同步處理start window,該覆蓋動作會引起如下2中情況的洩露:
a, 第二個activity 非同步處理start window在transferStartingWindow之前完成,則步驟3中的非同步申請的start window被洩露;
b, 第二個activity非同步處理start window在transferStartingWindow之後完成,則第一個activity的start window在步驟4被複用後,被再次覆蓋,致使步驟2中的start window被洩露。
針對如上case,提出解決方案:
1, 針對a情況,在transferStartingWindow是,判斷被覆蓋的appWindowToken的start surface是否已存在(非同步處理完成),如果是,則remove掉步驟2中的start window,不做複用處理;
2,針對b情況,在非同步申請start window時,判斷對應appWindowToken的start surface是否已存在(transferStartingWindow複用了prev的start window),如果是,則不用再次申請start window。
目前的修改方案
frameworks/base/services/core/java/com/android/server/wm/AppWindowContainerController.java
.....
.....
private final Runnable mAddStartingWindow = new Runnable() {
...
...
@Override
public void run() {
final StartingData startingData;
final AppWindowToken container;
...
...
if (surface != null) {
boolean abort = false;
synchronized(mWindowMap) {
// If the window was successfully added, then
// we need to remove it.
if (container.removed || container.startingData == null) {
container.startingWindow = null;
container.startingData = null;
abort = true;
} else {
//modify
//container.startingSurface = surface;
if (mContainer != null && mContainer.startingSurface == null) {
container.startingSurface = surface;
} else {
Slog.w (TAG_WM,"add the starting window with mContainer.startingSurface is not null.");
abort = true;
}
//modify
}
}
...
...
}
...
...
...
}
frameworks/base/services/core/java/com/android/server/wm/AppWindowToken.java
boolean transferStartingWindow(IBinder transferFrom) {
final AppWindowToken fromToken = getDisplayContent().getAppWindowToken(transferFrom);
if (fromToken == null) {
return false;
}
//add
if (startingSurface != null){
if (fromToken.getController() != null){
Slog.w (TAG_WM,"call transferStartingWindow with transferTo's startingSurface is not null.");
fromToken.getController().removeStartingWindow();
}
}
//add
final WindowState tStartingWindow = fromToken.startingWindow;
....
....
....
....
}
相關推薦
Monkey出現SystemServer 記憶體佔用高達200MB以上,長時間等待無降低
5臺手機有一臺保持在280M佔用沒有降下來,其他4臺都降到150M左右; 沒有降下來的手機其佔用增長,主要體現在java heap和native heap上面。 XXXX:/ # cat /d/ion/ion_mm_heap | grep Splash 0xc2552cc
製作PPT必備的1款神級外掛,它的使用率高達90%以上,不服來辯!
在做PPT的時候,想讓PPT有創意又很高大上,自然少不了“祕密武器”。今天小編要說的這個祕密武器就是,1款神級外掛—iSlide。 一、設計 在設計選項中,可以一鍵優化排版、一鍵處理圖片。比如將圖片秒裁剪成拼圖,一鍵搞定方便。 二、資源 做P
JVM記憶體佔用情況深入分析,分分鐘解開你的疑惑
很多同學都問過這個問題,為什麼我的Xmx設定4g,但是TOP命令查詢RES卻佔用5G,6G,甚至10G。這個正常嗎?也可以說正常,也可以說不正常,怎麼判斷?筆者今天就要為你解答這個問題,叫你如何分析JVM佔用的記憶體都分配到了哪裡,哪些地方合理,哪些地方異常。 記憶體分佈 首先
Bitmap記憶體佔用及華為機型長圖載入問題
部分內容轉載自: 0 本章內容 一個Bitmap物件佔多大記憶體空間 解決大圖載入OOM的幾種方式 華為mate10等機型長圖載入失敗問題 1 一個Bitmap物件佔多大記憶體空間 1.1 解碼格式 筆者曾經在面試時,也曾經遇到過這個問題:一個Bitmap
如何做到4小時以上的長時間精神專注?
要做到長時間專注,你需要想辦法讓注意力聚焦在所做的事情上。 讓你處理的速度趨近於接收速度,讓你的思維跟上所做事情的發展。 如何做到長時間(4個小時以上)精神專注? 我的回答是: 讓你的注意力聚焦在你所做的事情上,你的處理速度趨近於你的接收速度,你的思維跟上你所做的事情的
Mysql DDL出現長時間等待MDL問題分析
開發十年,就只剩下這套架構體系了! >>>
電腦一開機記憶體(共8G)就用了70%以上,工作管理員裡面檢視沒有佔用記憶體很高的程序,原來是驅動問題
現象描述: 出現兩次這個問題,都是長時間開機後,出現記憶體佔用很高,重啟還是記憶體佔用很高,而且工作管理員裡面檢視,實際沒有程序佔用那麼高。 曾經試過很多種辦法,但是一樣的現象卻有不同的原因。 比如試過停掉superf
Linux系統記憶體佔用90%以上——解決方法
最近遇到一個疑問,不管是top,還是cat /proc/meminfo, 發現free記憶體基本快沒了,難道我們的程式出問題了?排查半天沒有事, 後來百度到相關帖子,記錄一下,這是Linux核心機制, Linux與Windows不同,會存在快取記憶體,通常叫做Cac
Android6.0以上應用在長時間在後臺,因為記憶體不足導致系統回收記憶體,當再次啟動應用出現Fragment重疊或者空白、異常解決方案(提供模擬記憶體不足導致系統回收記憶體的方案)。
Android6.0以上應用在長時間在後臺,因為記憶體不足導致系統回收記憶體,當再次啟動應用出現Fragment重疊或者空白解決方案。首先提供一個方法模擬記憶體不足導致系統回收記憶體的方案:開啟Android Studio -->Tools-->Android
使用scrapy框架的monkey出現monkeypatchwarning: monkey-patching ssl after ssl...的解決辦法
使用 bsp tro 警告 pyc div pre info strong 問題描述: 環境情況: pycharm 2016.1.4———-python 3.6.0——–windows10系統 在scrapy爬蟲框架中, 使用協程gevent中的monkey時, 可能會
交換機CPU負載高達90%以上(一)【新任幫主】
交換機流量 很多 案例分享 自己 交換機 堆疊 技術分享 示意圖 mark 交換機CPU負載高達90%以上(一)一.前言自從工作以來 ,接觸了很多的項目,也遇到了無數多的問題,有些問題看似很奇葩,其實從理論上來解釋都是行的通的,當然我們排除是設備或是軟件自身的bug問題,因
如何獲取顯示卡的GPU佔用率和視訊記憶體佔用情況
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
unity優化《二》--Texture圖片空間和記憶體佔用分析
打包多種型別的專案,空專案和10張放在Resources資料夾中的圖為比較案例。以下是比較資料。 IPHONE: 1.空專案----空間佔用量42.3MB----IPA大小10MB 2.10張1200*520無壓縮Texure 單張圖佔用量2.8MB----空間佔用量70.2MB
伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制代碼數(轉)
原文連結:http://www.cnblogs.com/personnel/p/4583038.html 最近一二個月以來,我發現伺服器的記憶體佔用正按著每天60M的速度增加。 一臺windows 2003的伺服器(2G記憶體),剛剛啟起時佔用記憶體:600M左右。 執行20天后,記憶體佔用(PF使用)
伺服器記憶體線性增長,根據控制代碼數查詢問題程序 伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制代碼數(轉)
伺服器修改成nignx+xxfm之後 訪問速度變快了很多。但是伺服器記憶體每天線性增長30M左右。 網上找了很多資料都不行。根據這篇文章伺服器記憶體佔用不斷的增加 & 工作管理員(PF使用率)不斷的增加:關注控制代碼數(轉) 檢視所有程序的控制代碼數,發現xxfm.exe程序的控制代碼數有3萬多,
如何理解Linux下,使用top命令看到記憶體佔用情況
linux 下使用top命令之後看到記憶體佔用情況如下: Mem: 32849260k total, 32630656k used, 218604k free, 445512k buffers Swap: 0k total, 0k used,
使用python進行Linux伺服器監測,畫CPU使用率和記憶體佔用圖
整體思想 使用python包psutil 獲取linux伺服器CPU、記憶體等相關資料 資料儲存在本地或者儲存在資料庫 讀取資料,使用python包pyecharts畫圖 使用Flask,頁面前端訪問 一、pstuil 的安裝和使用,儲存資料 pip inst
python人臉識別系統早已開源,離線識別率高達99%以上!
以往的人臉識別主要是包括人臉影象採集、人臉識別預處理、身份確認、身份查詢等技術和系統。現在人臉識別已經慢慢延伸到了ADAS中的駕駛員檢測、行人跟蹤、甚至到了動態物體的跟蹤。 加小編QQ群:865597862獲取大量Python視訊教程以及各類PDF! 由此可以看出,人
瀏覽器記憶體佔用情況實驗
實驗目的 最近在工作的時候,經常會記憶體溢位,讓我很不開心,於是我想了解下,用什麼瀏覽器佔用的記憶體更少 參與物件 火狐瀏覽器 IE瀏覽器 谷歌瀏覽器 QQ瀏覽器 360極速瀏覽器 edge瀏覽器 歐朋瀏覽器 實驗內容
Sublime Text 3 CPU佔用率過高 && WebStorm記憶體佔用過高
用Sublime Text 3或WebStorm進行前端開發時,遇到了同樣的問題:當專案檔案比較多或檔案比較大時,CPU佔用率或記憶體佔用持續比較高,後來經查閱發現是index files導致的,可以理解為:Sublime Text 3或WebStorm需要不斷重新整理檔案索引,不斷將專案檔案從硬碟中讀到