好庫推薦--iOS監(jiān)測線上版本的內(nèi)存問題

今天安利一個由騰訊手機QQ團隊開源的強大的iOS內(nèi)存監(jiān)測組件OOMDetector

鏈接:https://github.com/Tencent/OOMDetector? ? ?

簡介

OOMDetector是一個iOS內(nèi)存監(jiān)控組件,應用此組件可以幫助你輕松實現(xiàn)OOM監(jiān)控、大內(nèi)存分配監(jiān)控、內(nèi)存泄漏檢測等功能。

特性

1.OOM監(jiān)控:監(jiān)控OOM,Dump引起爆內(nèi)存的堆棧

2.大內(nèi)存分配監(jiān)控:監(jiān)控單次大塊內(nèi)存分配,提供分配堆棧信息

3.內(nèi)存泄漏檢測:可檢測OC對象、Malloc堆內(nèi)存泄漏,提供泄漏堆棧信息

使用方法

初始化

// 初始化,6s以下機型內(nèi)存觸頂閾值默認設(shè)置為300M,6s及以上機型內(nèi)存觸頂閾值默認設(shè)置為800M。

- (void)setupWithDefaultConfig;

OOM監(jiān)控

// 開啟OOM監(jiān)控,默認在setupWithDefaultConfig方法中已經(jīng)開啟

-(void)startMaxMemoryStatistic:(double)overFlowLimit;

大內(nèi)存分配監(jiān)控

// 開啟單次大內(nèi)存分配監(jiān)控

-(BOOL)startSingleChunkMallocDetector:(size_t)threshholdInBytes callback:(ChunkMallocBlock)callback;

內(nèi)存泄漏檢測

// 初始化內(nèi)存泄漏監(jiān)控器,記錄所有堆對象

- (void)setupLeakChecker;

// 執(zhí)行一次泄露檢測,建議在主線程調(diào)用,該操作會掛起所有子線程進行泄露檢測(該操作較耗時,平均耗時在1s以上,請限制調(diào)用頻率)

-(void)executeLeakCheck:(QQLeakCheckCallback)callback;

其它功能

// 開啟堆內(nèi)存堆棧監(jiān)控,開啟后會實時記錄所有的內(nèi)存分配堆棧,并將多次重復調(diào)用的相同堆棧合并,如果合并后的size大于threshHoldInbytes,該分配堆棧將被輸出到log用于分析,log路徑Library/OOMDetector

-(BOOL)startMallocStackMonitor:(size_t)threshholdInBytes needAutoDumpWhenOverflow:(BOOL)needAutoDump dumpLimit:(double)dumpLimit sampleInterval:(NSTimeInterval)sampleInterval;

// 開啟VMStackMonitor用以監(jiān)控非直接通過malloc方式分配的內(nèi)存因為startVMStackMonitor:方法用到了私有API __syscall_logger會帶來app store審核不通過的風險,此方法默認只在DEBUG模式下生效,如果需要在RELEASE模式下也可用,請打開USE_VM_LOGGER_FORCEDLY宏,但是切記在提交appstore前將此宏關(guān)閉,否則可能會審核不通過

-(BOOL)startVMStackMonitor:(size_t)threshHoldInbytes;

設(shè)置代理

@protocol QQOOMPerformanceDataDelegate // 在調(diào)用startMaxMemoryStatistic:開啟內(nèi)存觸頂監(jiān)控后會觸發(fā)此回調(diào),返回前一次app運行時單次生命周期內(nèi)的最大物理內(nèi)存數(shù)據(jù)

-(void)performanceData:(NSDictionary *)data completionHandler:(void (^)(BOOL))completionHandler; @end

@protocol QQOOMFileDataDelegate // 在出現(xiàn)單次大塊內(nèi)存分配、檢查到內(nèi)存泄漏且時、調(diào)用uploadAllStack方法時觸發(fā)此回調(diào)

-(void)fileData:(NSData *)data extra:(NSDictionary *)extra type:(QQStackReportType)type completionHandler:(void (^)(BOOL))completionHandler; @end

PS

如果你遇到類似"Undefined symbols for architecture arm64: "std::__1::__next_prime(unsigned long)""的鏈接問題, 你可以做如下設(shè)置:

Build Settings -> Linking -> Other Linker Flags -> -lc++

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容