国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

移動(dòng)端監(jiān)控體系之技術(shù)原理剖析

移動(dòng)開(kāi)發(fā) 移動(dòng)應(yīng)用
在這樣一個(gè)注重用戶體驗(yàn)的時(shí)代,APM 技術(shù)快速發(fā)展,國(guó)內(nèi)更是百花齊放,最近對(duì)各個(gè)公司的 APM 產(chǎn)品有一個(gè)調(diào)研,并在此基礎(chǔ)上進(jìn)行了自己的實(shí)踐。這里就從 iOS 的角度出發(fā),談?wù)勛约簩?duì)移動(dòng)端 APM 的技術(shù)上的理解,并提供相對(duì)應(yīng)的實(shí)例。

[[184536]]

在這樣一個(gè)注重用戶體驗(yàn)的時(shí)代,APM 技術(shù)快速發(fā)展,國(guó)內(nèi)更是百花齊放,最近對(duì)各個(gè)公司的 APM 產(chǎn)品有一個(gè)調(diào)研,并在此基礎(chǔ)上進(jìn)行了自己的實(shí)踐。這里就從 iOS 的角度出發(fā),談?wù)勛约簩?duì)移動(dòng)端 APM 的技術(shù)上的理解,并提供相對(duì)應(yīng)的實(shí)例。

何為 APM

APM 的全稱是Application performance management,即應(yīng)用性能管理,通過(guò)對(duì)應(yīng)用的可靠性、穩(wěn)定性等方面的監(jiān)控,進(jìn)而達(dá)到可以快速修復(fù)問(wèn)題、提高用戶體驗(yàn)的目的。

國(guó)內(nèi)各大公司都有自己的一套監(jiān)控體系,這個(gè)系統(tǒng)可能是自己研發(fā),也可能是第三方提供,當(dāng)然對(duì)于這個(gè)數(shù)據(jù)為王的時(shí)代,很多有實(shí)力的公司傾向于自主研發(fā),掌握核心數(shù)據(jù)。比較有代表性的 APM 產(chǎn)品有:聽(tīng)云、阿里百川、騰訊 bugly、NewRelic、OneAPM、網(wǎng)易云捕等

說(shuō)到監(jiān)控,那么指標(biāo)是我們所關(guān)注的呢?如下所示

  • 網(wǎng)絡(luò)請(qǐng)求:成功率、狀態(tài)碼、流量、網(wǎng)絡(luò)響應(yīng)時(shí)間、HTTP與HTTPS的 DNS 解析、TCP握手、SSL握手(HTTP除外)、首包時(shí)間等時(shí)間
  • 界面卡頓、卡頓堆棧
  • 崩潰率、崩潰堆棧
  • Abort 率:也就是由于內(nèi)存過(guò)高的等原因,被系統(tǒng)殺死的情況
  • 交互監(jiān)控:頁(yè)面加載時(shí)間、頁(yè)面的交互痕跡
  • 維度信息:地域、運(yùn)營(yíng)商、網(wǎng)絡(luò)接入方式、操作系統(tǒng)、應(yīng)用版本等
  • 其他:內(nèi)存、幀率、CPU使用率、啟動(dòng)時(shí)間、電量等

聊聊原理

卡頓檢測(cè)

當(dāng)應(yīng)用發(fā)生卡頓的時(shí)候,一般會(huì)伴隨著掉幀,所以幀率是最容易想到的指標(biāo)來(lái)判斷卡頓。對(duì)于線下的測(cè)試環(huán)境,我們可以使用幀率來(lái)對(duì)開(kāi)發(fā)做一些提示,告訴他們可能發(fā)生了卡頓。但是幀率不穩(wěn)定性較高,所以一般會(huì)采取另一種方式來(lái)做卡頓檢測(cè)。那就是Runloop,對(duì)于細(xì)節(jié)可以查看 Runloop 源碼,會(huì)發(fā)現(xiàn)對(duì)于事件的處理主要就是在kCFRunLoopBeforeSources和kCFRunLoopBeforeWaiting狀態(tài)之間,還有kCFRunLoopAfterWaiting之后。那我們就可以對(duì)兩個(gè)狀態(tài)進(jìn)行監(jiān)控,如果消耗時(shí)間太久,就代表著卡頓的發(fā)生。 

 

 

阿里百川 

阿里百川

上圖摘自阿里百川,如圖所示,我們會(huì)對(duì)卡頓次數(shù)做一個(gè)判斷,如果次數(shù)為1,但時(shí)間超時(shí),則為單次耗時(shí)較長(zhǎng)的卡頓,如果次數(shù)到達(dá)閥值,則證明是連續(xù)短時(shí)間卡頓。

當(dāng)卡頓發(fā)生之后,我們?yōu)榱硕ㄎ唬瑫?huì)收集當(dāng)時(shí)的一個(gè)堆棧情況,在此你可以使用 PLCrashReporter 來(lái)做,也可以自己研發(fā)一個(gè)堆棧收集庫(kù)(可參考http://www.jianshu.com/p/7e4c7b94ca36來(lái)做)

對(duì)于實(shí)例,網(wǎng)上已經(jīng)有很多開(kāi)源的項(xiàng)目,你可以參考https://github.com/suifengqjn/PerformanceMonitor

崩潰檢測(cè)

對(duì)于崩潰的情況,一般是由 Mach異常或 Objective-C 異常(NSException)引起的。我們可以針對(duì)這兩種情況抓取對(duì)應(yīng)的 Crash 事件。

Mach 異常捕獲

如果想要做mach 異常捕獲,需要注冊(cè)一個(gè)異常端口,這個(gè)異常端口會(huì)對(duì)當(dāng)前任務(wù)的所有線程有效,如果想要針對(duì)單個(gè)線程,可以通過(guò) thread_set_exception_ports注冊(cè)自己的異常端口,發(fā)生異常時(shí),首先會(huì)將異常拋給線程的異常端口,然后嘗試拋給任務(wù)的異常端口,當(dāng)我們捕獲異常時(shí),就可以做一些自己的工作,比如,當(dāng)前堆棧收集等。

對(duì)于如何注冊(cè)一個(gè)異常端口,這里有示意圖和 PLCrashReporter https://github.com/plausiblelabs/plcrashreporter可以參考 

 

 

 

Unix 信號(hào)捕獲

對(duì)于Mach 異常,操作系統(tǒng)會(huì)將其轉(zhuǎn)換為對(duì)應(yīng)的 Unix信號(hào),所以如果你對(duì)Mach不熟悉的話,也可以通過(guò)注冊(cè)signalHandler的方式來(lái)做信號(hào)異常。對(duì)于實(shí)例,你可以參考https://github.com/xcysuccess/iOSCrashUncaught

 

  1. signal(SIGHUP, signalHandler); 
  2.  
  3. signal(SIGINT, signalHandler); 
  4.  
  5. signal(SIGQUIT, signalHandler); 
  6.  
  7.   
  8.  
  9. signal(SIGABRT, signalHandler); 
  10.  
  11. signal(SIGILL, signalHandler); 
  12.  
  13. signal(SIGSEGV, signalHandler); 
  14.  
  15. signal(SIGFPE, signalHandler); 
  16.  
  17. signal(SIGBUS, signalHandler); 
  18.  
  19. signal(SIGPIPE, signalHandler);  

NSException 捕獲

對(duì)于NSException異常,也比較容易處理,通過(guò)注冊(cè)NSUncaughtExceptionHandler捕獲異常信息即可,將拿到的NSException細(xì)節(jié)寫(xiě)入Crash日志,上傳到后臺(tái)做數(shù)據(jù)分析

  1. // register the uncaught exception handler 
  2.  
  3. SetUncaughtExceptionHandler(&handler);  

Abort 率檢測(cè)

目前對(duì)于內(nèi)存過(guò)高被殺死的情況是沒(méi)有辦法直接統(tǒng)計(jì)的,一般通過(guò)排除法來(lái)做百分比的統(tǒng)計(jì),原理如下

  • 程序啟動(dòng),設(shè)置標(biāo)志位
  • 程序正常退出,清楚標(biāo)志
  • 程序Crash,清楚標(biāo)志
  • 程序電量過(guò)低導(dǎo)致關(guān)機(jī),這個(gè)也沒(méi)辦法直接監(jiān)控,可以加入電量檢測(cè)來(lái)輔助判斷
  • 第二次啟動(dòng),標(biāo)志位如果存在,則代表Abort一次,上傳后臺(tái)做統(tǒng)計(jì) 

 

 

阿里百川 

阿里百川

交互監(jiān)控

對(duì)于頁(yè)面的加載時(shí)間,這個(gè)比較容易實(shí)現(xiàn),直接通過(guò)Runtime hook對(duì)應(yīng)的生命周期方法即可,比如 viewDidLoad、viewWillAppear等

對(duì)于用戶的交互痕跡,比如點(diǎn)擊了那個(gè)按鈕、跳轉(zhuǎn)到了那個(gè)頁(yè)面,這些信息偏于用戶行為的收集,我們也獨(dú)立研發(fā)了一個(gè)無(wú)埋點(diǎn)的SDK,專門(mén)來(lái)做用戶行為數(shù)據(jù)的收集與分析,核心也是基于 hook AOP的思想。細(xì)節(jié)可以參考我同事的作品

網(wǎng)絡(luò)監(jiān)控

對(duì)于成功率、狀態(tài)碼、流量,以及網(wǎng)絡(luò)的響應(yīng)時(shí)間之類的,我們可以主要可以通過(guò)兩種方式來(lái)做

  • 針對(duì)URLConnection、CFNetwork、NSURLSession三種網(wǎng)絡(luò)做Hook,hook的具體技術(shù)可以是method swizzle 也可以是Proxy、Fishhook之類的
  • 也可以使用 NSURLProtocol 對(duì)網(wǎng)絡(luò)請(qǐng)求的攔截,進(jìn)而得到流量、響應(yīng)時(shí)間等信息,但是NSURLProtocol有自己的局限,比如NSURLProtocol只能攔截NSURLSession,NSURLConnection以及UIWebView,但是對(duì)于CFNetwork則無(wú)能為力

對(duì)于第一種方式可以Hook哪些方法的,可以參考這個(gè)圖 

 

 

 

對(duì)于 HTTP與HTTPS 的 DNS 解析、TCP握手、SSL握手(HTTP除外)、首包時(shí)間等時(shí)間的統(tǒng)計(jì),稍有難度 

 

 

 

但是,因?yàn)槲覀兯褂玫腢RLConnection、CFNetwork、NSURLSession底層都是 BSDSocket,所以可以嘗試在socket上動(dòng)手腳來(lái)實(shí)現(xiàn)效果,類似于通過(guò)ViewController的生命周期方法來(lái)統(tǒng)計(jì)頁(yè)面加載時(shí)間的做法,我們Hook socket相關(guān)的方法來(lái)做,比如通過(guò)hook socket連接時(shí)的 connect方法,拿到tcp握手的起始時(shí)間,通過(guò)hook SSLHandshake方法,在SSLHandshake執(zhí)行的時(shí)候拿到 SSL握手的起始時(shí)間等。目前聽(tīng)云已經(jīng)提供了 HTTP 的分段時(shí)間查詢功能,大家去體驗(yàn)下

  1. int connect(int, const struct sockaddr *, socklen_t) __DARWIN_ALIAS_C(connect); 
  2.  
  3. OSStatus SSLHandshake(SSLContextRef ctx)  

但是對(duì)于 iOS 9 Apple 加入 ATS 新特性,并要求開(kāi)發(fā)者使用 HTTPS,我在 iOS9、10上對(duì) HTTPS 網(wǎng)絡(luò)請(qǐng)求Hook socket方法時(shí)候,有一些方法hook 失效,猜想應(yīng)該是Apple 進(jìn)行了加固、加密,導(dǎo)致一些系統(tǒng)方法沒(méi)辦法hook,所以在 iOS9、10 上無(wú)法通過(guò)socket來(lái)取得HTTPS網(wǎng)絡(luò)的分段時(shí)間

不過(guò)apple在 iOS 10 推出一個(gè)API,可以在 iOS10 版本以上進(jìn)行網(wǎng)絡(luò)信息的收集

  1. - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics 

打印結(jié)果如下

  1. (Fetch Start) 2017-02-24 09:03:06 +0000 
  2.  
  3. (Domain Lookup Start) 2017-02-24 09:03:06 +0000 
  4.  
  5. (Domain Lookup End) 2017-02-24 09:03:06 +0000 
  6.  
  7. (Connect Start) 2017-02-24 09:03:14 +0000 
  8.  
  9. (Secure Connection Start) 2017-02-24 09:03:14 +0000 
  10.  
  11. (Secure Connection End) 2017-02-24 09:03:16 +0000 
  12.  
  13. (Connect End) 2017-02-24 09:03:16 +0000 
  14.  
  15. (Request Start) 2017-02-24 09:03:16 +0000 
  16.  
  17. (Request End) 2017-02-24 09:03:16 +0000 
  18.  
  19. (Response Start) 2017-02-24 09:03:16 +0000 
  20.  
  21. (Response End) 2017-02-24 09:03:16 +0000  

當(dāng)然,對(duì)于網(wǎng)絡(luò)各層次的時(shí)間獲取,如果你有好的方案,希望您可以留言告知。同時(shí)對(duì)于一些維度信息和內(nèi)存等基礎(chǔ)指標(biāo),很容易獲取,這里就不細(xì)談了

大禮包

在調(diào)研和學(xué)習(xí)APM技術(shù)的過(guò)程中,發(fā)現(xiàn)了很多優(yōu)秀的博客,所以在此推薦給大家,有需要的可以自取

  • 蘑菇街移動(dòng)端全鏈路跟蹤保障體系

http://t.cn/R5whClL

  • 美團(tuán)外賣移動(dòng)端性能監(jiān)測(cè)體系實(shí)現(xiàn)

http://t.cn/RIUcX0o

  • 微信讀書(shū) iOS 質(zhì)量保證及性能監(jiān)控

http://t.cn/RibKdFW

  • 網(wǎng)易NeteaseAPM iOS SDK技術(shù)實(shí)現(xiàn)分享

http://t.cn/R5ZyWVt

  • 阿里百川碼力APP監(jiān)控來(lái)了 重量級(jí)選手進(jìn)入APM市場(chǎng)

http://t.cn/RfjDrvt

  • APM最佳實(shí)踐系列文章專題合輯

http://t.cn/RxZQOto

  • 手機(jī)淘寶:億級(jí)用戶APP的快速運(yùn)維交付實(shí)踐

http://t.cn/RibFFYO 

責(zé)任編輯:龐桂玉 來(lái)源: iOS大全
相關(guān)推薦

2022-06-09 15:53:16

移動(dòng)端渲染GPU

2016-03-21 10:05:18

2022-12-29 08:56:30

監(jiān)控服務(wù)平臺(tái)

2022-09-05 22:22:00

Stream操作對(duì)象

2015-08-10 14:41:39

Kubernetes監(jiān)控開(kāi)源容器管理

2024-07-17 09:03:56

2022-07-27 17:40:47

技術(shù)人臉識(shí)別移動(dòng)

2021-05-09 23:01:41

Dubbo原理消費(fèi)端

2016-01-05 09:45:57

設(shè)計(jì)版式

2011-12-08 11:01:45

HTML 5

2016-12-19 14:35:32

Spark Strea原理剖析數(shù)據(jù)

2016-01-08 11:35:01

移動(dòng)端設(shè)計(jì)版面

2017-09-08 16:45:14

移動(dòng)

2016-07-28 23:19:10

云計(jì)算SOA

2010-02-23 16:07:39

2019-07-02 13:48:15

360監(jiān)控app

2016-10-25 13:34:53

2020-08-13 15:36:14

移動(dòng)端跨平臺(tái)小程序

2010-07-29 17:26:54

Flex富客戶端技術(shù)

2019-06-11 09:30:04

PKI密鑰網(wǎng)絡(luò)安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲理论电影网| 欧美黑人在线观看| av免费在线观看网址| 国产麻豆视频精品| 久久人人爽人人爽人人片av高请| 国产精品蜜臀| 一区二区欧美视频| 日本香蕉视频在线观看| 欧美成人午夜| 日本欧美精品在线| 波多野结依一区| 午夜天堂影视香蕉久久| 久久亚洲国产成人精品无码区| 国产91一区| 欧美在线不卡区| 美女视频一区| 精品久久久久久综合日本欧美| 国产精品精华液网站| 国产精品 日产精品 欧美精品| 日本欧美在线视频| 亚洲午夜国产成人| 一本一道久久a久久精品逆3p| 欧美精品一区二区三区三州| 免费看av成人| 精品毛片乱码1区2区3区| 国产精品99999| 精品美女永久免费视频| 色久视频在线播放| 欧美日韩免费高清一区色橹橹| 你懂的视频在线观看| 99久久综合狠狠综合久久| 欧美日韩国产三区| 国产真实精品久久二三区| 免费中文日韩| 欧美在线黄色| 蜜桃导航-精品导航| 日韩中文在线电影| 国产高清自拍一区| 国产在线一区二区| 国产精品日韩一区| 九九在线高清精品视频| 国产精品电影观看| 欧美成人激情| 91久久久久久国产精品| 亚洲麻豆一区| 欧美中在线观看| 欧美亚洲人成在线| 中文字幕精品久久| 日本黄色一区| 91免费在线视频网站| 丝袜脚交一区二区| 欧美日韩福利在线| 亚洲欧美日韩国产成人精品影院| 超鹏97在线| 日本aⅴ大伊香蕉精品视频| 二区三区不卡| 国产精品偷伦一区二区| 欧美偷窥清纯综合图区| 激情伦成人综合小说| 中文字幕亚洲在| 国产高潮av| 午夜国产精品一区| 青青操在线视频| 久久精品99国产精品酒店日本| jizzjizzjizz欧美| 91视频婷婷| 水野朝阳av一区二区三区| 国产一区二区高清视频| 精品一区中文字幕| 最新日本视频| 色婷婷综合久久久中文一区二区| aaa免费看大片| 亚洲一区二区三区四区在线观看 | 香蕉久久久久久| 极品日韩久久| 色综合久久99| 国产欧美一区二区三区精品观看 | 久久福利在线| 日韩第一页在线观看| 日韩欧美区一区二| 另类亚洲自拍| av成人福利| 黄色一级片黄色| 久久久精品免费| 久久日韩精品一区二区五区| 日韩欧美精品电影| 国产日韩一区二区在线观看| 中文欧美在线视频| 久久精品夜色噜噜亚洲aⅴ| 超碰97久久国产精品牛牛| 成全电影播放在线观看国语| 91精品国产一区二区人妖| 日本中文字幕伦在线观看| 国产精品婷婷| 国产精品亚洲二区在线观看| 亚洲第一页自拍| 黄视频在线免费看| 欧美性感一类影片在线播放| 欧美6一10sex性hd| 日韩大陆毛片av| 88xx成人永久免费观看| 国产精品v片在线观看不卡| 国产免费久久| 能看的毛片网站| 欧美一级生活片| 97偷自拍亚洲综合二区| 日日噜噜噜夜夜爽爽狠狠| 欧美精品在线视频观看| 日韩欧美福利视频| 91精品观看| 黄色大片在线播放| 91黄在线观看| 色悠久久久久综合欧美99| 中文字幕中文字幕精品| 久久99精品久久| 日韩女优中文字幕| 欧美一区二区三区精品| 国产在线不卡| 激情成人四房播| 亚洲自拍偷拍一区二区三区| 久久综合av| 水莓100在线视频| 国产野外作爱视频播放| 欧美大片在线看免费观看| 亚洲色图欧美激情| 日韩成人a**站| 一本大道香蕉久在线播放29| 国产欧美精品在线| 91精品久久久久久蜜臀| 久久久美女毛片| 成人一区二区三区在线观看| 97久久亚洲| 国产在线1区| 韩日视频在线观看| 亚洲在线免费视频| 色与欲影视天天看综合网| 精品视频在线播放免| 亚洲欧洲av一区二区三区久久| 综合久久一区| 日韩经典一区| 黄色小视频在线免费观看| 九一国产精品视频| 丁香激情视频| 日本久久久网站| 国产成人亚洲欧美| 久久天天躁狠狠躁夜夜躁| 欧美系列亚洲系列| 一本久道中文字幕精品亚洲嫩| 欧美激情第10页| 91精品啪在线观看国产爱臀| 天堂中文字幕在线| 日本不卡在线观看视频| 亚洲三区在线观看| 欧洲在线视频一区| 国产成人亚洲欧美| 国产精品私拍pans大尺度在线| 亚洲人成亚洲人成在线观看| 91精品国产综合久久婷婷香蕉| 国产精品激情偷乱一区二区∴| 国产精品1024| 国产91高潮流白浆在线麻豆| 成人av网站大全| 国产伦精品一区二区三区视频青涩 | 97精品一区| 欧美午夜18电影| 自拍欧美一区| 欧美日韩黄网站| 自拍网站在线观看| 国产a亚洲精品| 激情都市亚洲| 白浆视频在线观看| av第一福利在线导航| 九色porny丨首页入口在线| 成人在线高清| а天堂中文最新一区二区三区| 中文在线免费二区三区| 好操啊在线观看免费视频| av观看在线| 亚洲精品观看| 日本不卡影院| 精品一区二区三区四区五区| 欧美xxxx少妇| 高清一区二区| 女同另类激情重口| aaa国产精品| 久久精品日产第一区二区| 欧美午夜一区| 日韩精品一卡二卡三卡四卡无卡| 蜜桃传媒麻豆第一区在线观看| 久久精品国产99| 国产精品国产精品国产专区不片| 天天影视涩香欲综合网| 伊人伊成久久人综合网小说| 欧美精品一区二区免费| 国产suv精品一区二区三区88区| 国产日韩在线免费| 黄色三级中文字幕| 国产精品麻豆一区二区三区| 成人黄色免费观看| 欧美日韩亚洲一区三区|