iOS頁面卡頓監(jiān)測

頁面卡頓是由哪些原因導致的?

1.死鎖: 主線程拿到鎖A, 需要獲取鎖B, 而同時子線程拿了鎖B, 需要鎖A, 這時主線程等待鎖B的釋放, 子線程等待鎖A的釋放, 相互等待.

2.搶鎖: 主線程需要訪問DB, 而這時某個子線程往DB插入數(shù)據(jù). 通常搶鎖的體驗就是卡頓一陣子就恢復了.

3.主線程大量IO: 主線程為了方便直接寫入大量數(shù)據(jù), 導致頁面卡頓.

4.主線程大量計算: 程序中的算法不合理, 大量循環(huán)等操作, 導致主線程某個函數(shù)占用大量CPU.

5.大量的UI繪制: 復雜的UI, 圖文混排等, 帶來大量的UI繪制.

卡頓問題怎么定位?

1.死鎖一般會伴隨Crash, 我們可以通過Crash日志進行分析.

2.搶鎖的問題不太好辦, 我們能將鎖等待的時間打印出來, 但我們還需要知道是誰占用了鎖, 可以檢測Runloop的執(zhí)行,觀察耗時.

3.大量的IO可以在函數(shù)開始結束打點, 將函數(shù)占用時間打到日志中.

4.線程大量計算同理也可以將耗時記錄到日志中.

5.大量UI繪制一般是難免的, APP中總會有復雜頁面的繪制, 我們可以用AsnycDisplayKit等框架進行預排版,異步繪制,圖片解碼等.

如果我們能將上述問題發(fā)生時線程的堆棧信息捕捉下來, 那么就能快速定位到問題, 從而問題迎刃而解. 所以, iOS卡頓檢查的思路就是創(chuàng)建一個子線程, 監(jiān)控主線程Runloop的執(zhí)行, 觀察執(zhí)行耗時是否超過預閾值, 如果有就立即記錄線程堆棧.

如何獲取所有線程的堆棧呢?

PLCrashReporter

很有名的PLCrashReporter, 拿來主義就好!

這里也寫了一個監(jiān)測主線程RunLoop的demo

如何判斷主線程是否發(fā)生了卡頓?

FPS降低

CPU占用率很高

主線程Runloop執(zhí)行了很久

FPS能夠兼容后面兩個特征, 但在實際操作過程中發(fā)現(xiàn)FPS不好衡量抖動比較大. 對于搶鎖或者大量IO的情況, 光靠CPU是不行的, 所以一般檢測判斷, CPU占用是否超過了100%, 主線程Runloop執(zhí)行是夠超過閾值.

具體原因和思路如上, 下面貼出微信內(nèi)存監(jiān)控解決方案:

iOS微信內(nèi)存監(jiān)控

關于卡頓檢測, 世界上最好的免費APM平臺Fabric卻沒有, 國內(nèi)騰訊的bugly, 網(wǎng)易云捕等提供了類似的功能.


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赫蛇,隨后出現(xiàn)的幾起案子绵患,更是在濱河造成了極大的恐慌,老刑警劉巖悟耘,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件落蝙,死亡現(xiàn)場離奇詭異,居然都是意外死亡暂幼,警方通過查閱死者的電腦和手機筏勒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旺嬉,“玉大人管行,你說我怎么就攤上這事∮シ” “怎么了病瞳?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悲酷。 經(jīng)常有香客問我套菜,道長,這世上最難降的妖魔是什么设易? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任逗柴,我火速辦了婚禮,結果婚禮上顿肺,老公的妹妹穿的比我還像新娘戏溺。我一直安慰自己渣蜗,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布旷祸。 她就那樣靜靜地躺著耕拷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪托享。 梳的紋絲不亂的頭發(fā)上骚烧,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音闰围,去河邊找鬼赃绊。 笑死,一個胖子當著我的面吹牛羡榴,可吹牛的內(nèi)容都是我干的碧查。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼校仑,長吁一口氣:“原來是場噩夢啊……” “哼忠售!你這毒婦竟也來了?” 一聲冷哼從身側響起肤视,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤档痪,失蹤者是張志新(化名)和其女友劉穎涉枫,沒想到半個月后邢滑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡愿汰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年困后,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衬廷。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡摇予,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吗跋,到底是詐尸還是另有隱情侧戴,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布跌宛,位于F島的核電站酗宋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疆拘。R本人自食惡果不足惜蜕猫,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哎迄。 院中可真熱鬧回右,春花似錦隆圆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹬屹,卻和暖如春阶女,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哩治。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工秃踩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人业筏。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓憔杨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蒜胖。 傳聞我的和親對象是個殘疾皇子消别,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容