mac開(kāi)發(fā)系列35:CPU監(jiān)控

今天有用戶(hù)反饋予借,在mac微信不退出的情況下,蓋上電腦,發(fā)熱會(huì)比較厲害灵迫,然后打開(kāi)電腦秦叛,用活動(dòng)監(jiān)視器看到mac微信的能耗和CPU占用率都比較高。很自然的想法就是瀑粥,蓋上電腦期間挣跋,mac微信究竟干了什么事情,這些事情當(dāng)中狞换,又有哪些比較耗CPU避咆?

如果是開(kāi)著電腦,并且可以重現(xiàn)修噪,就可以用instrument來(lái)定位耗CPU的業(yè)務(wù)代碼查库。然而,蓋上電腦沒(méi)法用instrument黄琼,所以只能靠日志了樊销。那么,日志要怎么加适荣,才能讓CPU占用率跟特定的業(yè)務(wù)代碼關(guān)聯(lián)起來(lái)呢现柠?

mach內(nèi)核中有數(shù)據(jù)結(jié)構(gòu)記錄了每個(gè)線(xiàn)程的CPU占用率,而堆棧調(diào)用分析框架(這里選用BSBacktraceLogger)可以打出每個(gè)線(xiàn)程執(zhí)行的現(xiàn)場(chǎng)日志弛矛,兩者結(jié)合够吩,就是我們想要的。下面直接上代碼:

    kern_return_t kr;
    task_info_data_t tinfo;
    mach_msg_type_number_t task_info_count;    
    task_info_count = TASK_INFO_MAX;
    kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo,     &task_info_count);
    if (kr != KERN_SUCCESS) {
          return nil;
    }
    thread_array_t thread_list; // 線(xiàn)程數(shù)組
    mach_msg_type_number_t thread_count; // 線(xiàn)程數(shù)   
    thread_info_data_t thinfo;
    mach_msg_type_number_t thread_info_count;
    thread_basic_info_t basic_info_th;    
    kr = task_threads(mach_task_self(), &thread_list, &thread_count); // 獲取線(xiàn)程列表和線(xiàn)程數(shù)
    if (kr != KERN_SUCCESS) {
        return nil;
    }

    NSString* backstraces = nil;// 遍歷每個(gè)線(xiàn)程    
    for (int j = 0; j < thread_count; j++)
    {
        thread_info_count = THREAD_INFO_MAX;
        kr = thread_info(thread_list[j], THREAD_BASIC_INFO,   (thread_info_t)thinfo, &thread_info_count); //獲取線(xiàn)程信息
        if (kr != KERN_SUCCESS) {
            return nil;
        }
        basic_info_th = (thread_basic_info_t)thinfo; // 線(xiàn)程基本信息丈氓,包含CPU占用率周循、CPU占用時(shí)間等等
        if (!(basic_info_th->flags & TH_FLAGS_IDLE)) {
            float current_thread_cpu = basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0; // 當(dāng)前線(xiàn)程的CPU占用率
            if(current_thread_cpu >= 自定義單核CPU占用率閾值){
    // 記錄CPU占用率超過(guò)閾值的線(xiàn)程的執(zhí)行堆棧
                NSString* backstrace = [BSBacktraceLogger bs_backtraceOfMachThread:thread_list[j]];
                backstraces = [NSString stringWithFormat:@"%@\n%@",     backstraces, backstrace];
            }
        }        
    }

    kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));

    return backstraces;

這里只是拋磚引玉,有待后續(xù)深入研究万俗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末湾笛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闰歪,更是在濱河造成了極大的恐慌嚎研,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库倘,死亡現(xiàn)場(chǎng)離奇詭異临扮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)教翩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)杆勇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人饱亿,你說(shuō)我怎么就攤上這事蚜退∪蜓ィ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵钻注,是天一觀的道長(zhǎng)蚂且。 經(jīng)常有香客問(wèn)我,道長(zhǎng)幅恋,這世上最難降的妖魔是什么膘掰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮佳遣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凡伊。我一直安慰自己零渐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布系忙。 她就那樣靜靜地躺著诵盼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪银还。 梳的紋絲不亂的頭發(fā)上风宁,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音蛹疯,去河邊找鬼戒财。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捺弦,可吹牛的內(nèi)容都是我干的饮寞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼列吼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幽崩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起寞钥,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慌申,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后理郑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蹄溉,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年香浩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了类缤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邻吭,死狀恐怖餐弱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤膏蚓,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布瓢谢,位于F島的核電站,受9級(jí)特大地震影響驮瞧,放射性物質(zhì)發(fā)生泄漏氓扛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一论笔、第九天 我趴在偏房一處隱蔽的房頂上張望采郎。 院中可真熱鬧,春花似錦狂魔、人聲如沸蒜埋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)整份。三九已至,卻和暖如春籽孙,著一層夾襖步出監(jiān)牢的瞬間烈评,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工犯建, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讲冠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓胎挎,卻偏偏與公主長(zhǎng)得像沟启,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子犹菇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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