1. 程式人生 > >Monkey出現SystemServer 記憶體佔用高達200MB以上,長時間等待無降低

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需要不斷重新整理檔案索引,不斷將專案檔案從硬碟中讀到