1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        CPU飆高,系統(tǒng)性能問題如何排查?

        共 1571字,需瀏覽 4分鐘

         ·

        2020-10-11 13:16




        一? 背景知識


        LINUX進(jìn)程狀態(tài)


        LINUX 2.6以后的內(nèi)核中,進(jìn)程一般存在7種基礎(chǔ)狀態(tài):D-不可中斷睡眠、R-可執(zhí)行、S-可中斷睡眠、T-暫停態(tài)、t-跟蹤態(tài)、X-死亡態(tài)、Z-僵尸態(tài),這幾種狀態(tài)在PS命令中有對應(yīng)解釋。



        • D (TASK_UNINTERRUPTIBLE),不可中斷睡眠態(tài)。顧名思義,位于這種狀態(tài)的進(jìn)程處于睡眠中,并且不允許被其他進(jìn)程或中斷(異步信號)打斷。因此這種狀態(tài)的進(jìn)程,是無法使用kill -9殺死的(kill也是一種信號),除非重啟系統(tǒng)(沒錯(cuò),就是這么頭硬)。不過這種狀態(tài)一般由I/O等待(比如磁盤I/O、網(wǎng)絡(luò)I/O、外設(shè)I/O等)引起,出現(xiàn)時(shí)間非常短暫,大多很難被PS或者TOP命令捕獲(除非I/O HANG死)。SLEEP態(tài)進(jìn)程不會占用任何CPU資源。


        • R (TASK_RUNNING),可執(zhí)行態(tài)。這種狀態(tài)的進(jìn)程都位于CPU的可執(zhí)行隊(duì)列中,正在運(yùn)行或者正在等待運(yùn)行,即不是在上班就是在上班的路上。


        • S (TASK_INTERRUPTIBLE),可中斷睡眠態(tài)。不同于D,這種狀態(tài)的進(jìn)程雖然也處于睡眠中,但是是允許被中斷的。這種進(jìn)程一般在等待某事件的發(fā)生(比如socket連接、信號量等),而被掛起。一旦這些時(shí)間完成,進(jìn)程將被喚醒轉(zhuǎn)為R態(tài)。如果不在高負(fù)載時(shí)期,系統(tǒng)中大部分進(jìn)程都處于S態(tài)。SLEEP態(tài)進(jìn)程不會占用任何CPU資源。


        • T&t (__TASK_STOPPED & __TASK_TRACED),暫停or跟蹤態(tài)。這種兩種狀態(tài)的進(jìn)程都處于運(yùn)行停止的狀態(tài)。不同之處是暫停態(tài)一般由于收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOUT四種信號被停止,而跟蹤態(tài)是由于進(jìn)程被另一個(gè)進(jìn)程跟蹤引起(比如gdb斷點(diǎn))。暫停態(tài)進(jìn)程會釋放所有占用資源。


        • Z (EXIT_ZOMBIE), 僵尸態(tài)。這種狀態(tài)的進(jìn)程實(shí)際上已經(jīng)結(jié)束了,但是父進(jìn)程還沒有回收它的資源(比如進(jìn)程的描述符、PID等)。僵尸態(tài)進(jìn)程會釋放除進(jìn)程入口之外的所有資源。


        • X (EXIT_DEAD), 死亡態(tài)。進(jìn)程的真正結(jié)束態(tài),這種狀態(tài)一般在正常系統(tǒng)中捕獲不到。


        Load Average & CPU使用率


        談到系統(tǒng)性能,Load和CPU使用率是最直觀的兩個(gè)指標(biāo),那么這兩個(gè)指標(biāo)是怎么被計(jì)算出來的呢?是否能互相等價(jià)呢?


        Load Average


        不少人都認(rèn)為,Load代表正在CPU上運(yùn)行&等待運(yùn)行的進(jìn)程數(shù),即



        但Linux系統(tǒng)中,這種描述并不完全準(zhǔn)確。


        以下為Linux內(nèi)核源碼中Load Average計(jì)算方法,可以看出來,因此除了可執(zhí)行態(tài)進(jìn)程,不可中斷睡眠態(tài)進(jìn)程也會被一起納入計(jì)算,即:


        staticunsignedlongcount_active_tasks(void)?{structtask_struct*p;unsignedlongnr=0;read_lock(&tasklist_lock);for_each_task(p)?{if?((p->state==TASK_RUNNING610?(p->state&TASK_UNINTERRUPTIBLE)))nr+=FIXED_1;?}read_unlock(&tasklist_lock);returnnr;?}......staticinlinevoidcalc_load(unsignedlongticks)?{unsignedlongactive_tasks;?/*?fixed-point?*/628staticintcount=LOAD_FREQ;count-=ticks;if?(count<0)?{count+=LOAD_FREQ;active_tasks=count_active_tasks();CALC_LOAD(avenrun[0],?EXP_1,?active_tasks);CALC_LOAD(avenrun[1],?EXP_5,?active_tasks);ALC_LOAD(avenrun[2],?EXP_15,?active_tasks);?}?}

        在前文 Linux進(jìn)程狀態(tài) 中有提到過,不可中斷睡眠態(tài)的進(jìn)程(TASK_UNINTERRUTED)一般都在進(jìn)行I/O等待,比如磁盤、網(wǎng)絡(luò)或者其他外設(shè)等待。由此我們可以看出,Load Average在Linux中體現(xiàn)的是整體系統(tǒng)負(fù)載,即CPU負(fù)載 + Disk負(fù)載 + 網(wǎng)絡(luò)負(fù)載 + 其余外設(shè)負(fù)載,并不能完全等同于CPU使用率(這種情況只出現(xiàn)在Linux中,其余系統(tǒng)比如Unix,Load還是只代表CPU負(fù)載)。


        CPU使用率


        CPU的時(shí)間分片一般可分為4大類:用戶進(jìn)程運(yùn)行時(shí)間 - User Time, 系統(tǒng)內(nèi)核運(yùn)行時(shí)間 - System Time, 空閑時(shí)間 - Idle Time, 被搶占時(shí)間 - Steal Time。除了Idle Time外,其余時(shí)間CPU都處于工作運(yùn)行狀態(tài)。



        通常而言,我們泛指的整體CPU使用率為User Time 和 Systime占比之和(例如tsar中CPU util),即:



        為了便于定位問題,大多數(shù)性能統(tǒng)計(jì)工具都將這4類時(shí)間片進(jìn)一步細(xì)化成了8類,如下為TOP對CPU時(shí)間片的分類。



        • us:用戶進(jìn)程空間中未改變過優(yōu)先級的進(jìn)程占用CPU百分比
        • sy:內(nèi)核空間占用CPU百分比
        • ni:用戶進(jìn)程空間內(nèi)改變過優(yōu)先級的進(jìn)程占用CPU百分比
        • id:空閑時(shí)間百分比
        • wa:空閑&等待I/O的時(shí)間百分比
        • hi:硬中斷時(shí)間百分比
        • si:軟中斷時(shí)間百分比
        • st:虛擬化時(shí)被其余VM竊取時(shí)間百分比


        這8類分片中,除wa和id外,其余分片CPU都處于工作態(tài)。


        二? 資源&瓶頸分析


        從上文我們了解到,Load Average和CPU使用率可被細(xì)分為不同的子域指標(biāo),指向不同的資源瓶頸??傮w來說,指標(biāo)與資源瓶頸的對應(yīng)關(guān)系基本如下圖所示。




        Load高 & CPU高


        這是我們最常遇到的一類情況,即load上漲是CPU負(fù)載上升導(dǎo)致。根據(jù)CPU具體資源分配表現(xiàn),可分為以下幾類:


        CPU sys高


        這種情況CPU主要開銷在于系統(tǒng)內(nèi)核,可進(jìn)一步查看上下文切換情況。


        • 如果非自愿上下文切換較多,說明CPU搶占較為激烈,大量進(jìn)程由于時(shí)間片已到等原因,被系統(tǒng)強(qiáng)制調(diào)度,進(jìn)而發(fā)生的上下文切換。


        • 如果自愿上下文切換較多,說明可能存在I/O、內(nèi)存等系統(tǒng)資源瓶頸,大量進(jìn)程無法獲取所需資源,導(dǎo)致的上下文切換。


        CPU si高


        這種情況CPU大量消耗在軟中斷,可進(jìn)一步查看軟中斷類型。一般而言,網(wǎng)絡(luò)I/O或者線程調(diào)度引起軟中斷最為常見:


        • NET_TX & NET_RX。NET_TX是發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包的軟中斷,NET_RX是接收網(wǎng)絡(luò)數(shù)據(jù)包的軟中斷,這兩種類型的軟中斷較高時(shí),系統(tǒng)存在網(wǎng)絡(luò)I/O瓶頸可能性較大。


        • SCHED。SCHED為進(jìn)程調(diào)度以及負(fù)載均衡引起的中斷,這種中斷出現(xiàn)較多時(shí),系統(tǒng)存在較多進(jìn)程切換,一般與非自愿上下文切換高同時(shí)出現(xiàn),可能存在CPU瓶頸。


        CPU us高


        這種情況說明資源主要消耗在應(yīng)用進(jìn)程,可能引發(fā)的原因有以下幾類:


        • 死循環(huán)或代碼中存在CPU密集計(jì)算。這種情況多核CPU us會同時(shí)上漲。


        • 內(nèi)存問題,導(dǎo)致大量FULLGC,阻塞線程。這種情況一般只有一核CPU us上漲。


        • 資源等待造成線程池滿,連帶引發(fā)CPU上漲。這種情況下,線程池滿等異常會同時(shí)出現(xiàn)。


        Load高 & CPU低


        這種情況出現(xiàn)的根本原因在于不可中斷睡眠態(tài)(TASK_UNINTERRUPTIBLE)進(jìn)程數(shù)較多,即CPU負(fù)載不高,但I(xiàn)/O負(fù)載較高??蛇M(jìn)一步定位是磁盤I/O還是網(wǎng)絡(luò)I/O導(dǎo)致。


        三? 排查策略


        利用現(xiàn)有常用的工具,我們常用的排查策略基本如下圖所示:



        從問題發(fā)現(xiàn)到最終定位,基本可分為四個(gè)階段:


        資源瓶頸定位


        這一階段通過全局性能檢測工具,初步定位資源消耗異常位點(diǎn)。


        常用的工具有:


        • top、vmstat、tsar(歷史)
        • 中斷:/proc/softirqs、/proc/interrupts
        • I/O:iostat、dstat


        熱點(diǎn)進(jìn)程定位


        定位到資源瓶頸后,可進(jìn)一步分析具體進(jìn)程資源消耗情況,找到熱點(diǎn)進(jìn)程。


        常用工具有:


        • 上下文切換:pidstat -w
        • CPU:pidstat -u
        • I/O:iotop、pidstat -d
        • 僵尸進(jìn)程:ps


        線程&進(jìn)程內(nèi)部資源定位


        找到具體進(jìn)程后,可細(xì)化分析進(jìn)程內(nèi)部資源開銷情況。


        常用工具有:


        • 上下文切換:pidstat -w -p [pid]
        • CPU:pidstat -u -p [pid]
        • I/O: lsof


        熱點(diǎn)事件&方法分析


        獲取到熱點(diǎn)線程后,我們可用trace或者dump工具,將線程反向關(guān)聯(lián),將問題范圍定位到具體方法&堆棧。


        常用的工具有:


        • perf:Linux自帶性能分析工具,功能類似hotmethod,基于事件采樣原理,以性能事件為基礎(chǔ),支持針對處理器相關(guān)性能指標(biāo)與操作系統(tǒng)相關(guān)性能指標(biāo)的性能剖析。


        • jstack
        • 結(jié)合ps -Lp或者pidstat -p一起使用,可初步定位熱點(diǎn)線程。
        • 結(jié)合zprofile-threaddump一起使用,可統(tǒng)計(jì)線程分布、等鎖情況,常用與線程數(shù)增加分析。


        • strace:跟蹤進(jìn)程執(zhí)行時(shí)的系統(tǒng)調(diào)用和所接收的信號。


        • tcpdump:抓包分析,常用于網(wǎng)絡(luò)I/O瓶頸定位。



        相關(guān)閱讀

        [1]Linux Load Averages: Solving the Mystery

        http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html

        [2]What exactly is a load average?

        http://linuxtechsupport.blogspot.com/2008/10/what-exactly-is-load-average.html



        有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

        歡迎大家關(guān)注Java之道公眾號


        好文章,我在看??

        瀏覽 50
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            唐嫣一级婬片A片AAA| 国产成人无码免费看片| 婷婷五月欧美| 成人小说视频| 国产色情在线| 草草浮力院| 亚洲中文第一页| 久久久精品淫秽色情| 西西444WWW无码视频软件| 中文免费高清在线观看视频| 欧美日韩国产在线观看| 97人妻在线| 啊啊啊国产| 尹人成人| 精品91视频| 91丨九色丨熟女新版| 天天中文字幕| 成人精品一区日本无码网站suv| 欧美性爱A片| 激情五月婷婷网| 激情黄色毛片| 福利老湿69| 91羞羞网站| 日韩本色一区| 国产日韩欧美在线观看| 少妇免费视频| 成人不卡| 免费看黄色视频| 91色婷婷综合久久中文字幕二区| 最近中文字幕| 色丁香婷婷| 国产一区二区三区在线视频| 九一香蕉视频| 中文无码熟妇人妻| 国产精品秘久久久久久| 伊人99re| 日韩码波多野结衣| 69国产精品视频免费观看| 99热这里是精品| 人妻熟女88AⅤ| 青青操天天干| 丰满大爆乳波霸奶| 夜夜操狠狠操| 艹逼中文字幕| 伊人久久大香线蕉| 成人国产AV网站| 北条麻纪视频| 天天插天天爽| 久久久亚洲AV无码精品色午夜| 特级丰满少妇免费观看| 大鸡巴黄色视频免费观看| 日韩精品在线观看视频| 69av在线| 天天色天天日| 亚洲777| 久久福利导航| 亚洲色影院| 欧洲三级片| 国产福利在线视频| 91一区| 女生自慰在线观看| 欧美操屄视频| 自拍偷拍网| 免费性爱视频| 五丁香在线观看AV| 中文字幕在线观看完整av| 久久久久久久久久国产精品免费观看-百度 | 黄片视频在线免费播放| 精品久久三级片| 天天草夜夜操| 台湾无码精品| 免费国产乱伦| 久久久国产精品在线| 色综合久久88色综合| 亚洲成人午夜电影| 91乱| 精品国内自产拍在线观看视频| 看免费黄色视频| 内射熟妇| 欧美久久免费| 色五月婷婷基地| 国产v视频| 黄片天堂| 男女啪啪网| 欧美拍拍视频| 一区二区三区无码在线| 影音先锋亚洲资源| 国产无码激情视频| 无码三级片在线观看| 伊人成人在线视频| h片在线观看| 久久日韩操| 亚洲人妻电影一区| 国产理论视频在线观看| WWWA级片| 五月激情久久| 人人操人人操人人操人人操| 国产精品S色| 人人看人人摸人人草| 精品人妻一区二区三区在线视频不卡 | 国产精品毛片一区二区在线看| 国产久久久久久久久久| 中文字幕精品视频在线观看| 蜜臀久久99精品久久久久酒店更新时间 | 韩国人妻无码| 国产在线毛片| 91精品国产99久久久久久天美 | 久草网站| 老师机性爱视频在线播放| 国产色黄视频| 蜜桃视频免费网站| AV国产在线观看| 国产精品久久久久无码AV| 一区二区在线免费观看| 亚洲中文字幕视频在线| 日韩成人小说| 色五月婷婷综合| 一区二区黄色| 中文字幕不卡+婷婷五月| 国产精品久久久久久久久久| 操久久久久久| 国产一级A片免费看| 啊啊啊在线| 亚洲五月丁香婷婷| 在线无码免费视频| 69pao| 三级久久久| 日本成人中文字幕| 大香蕉国产视频| 天天躁狠狠躁夜躁2024| 日操操| 免费av中文字幕| 内射网站在线看| 中文字幕在线观看二区| 久草久久| 人人看人人做| 亚洲少妇视频| 亚洲一本在线电影av| 成人在线18禁| 免费看A片视频| www.xxx国产| 免费三级毛片| AV中文字幕在线播放| 高清国产mv在线观看| 黄色片免费| 三级AV在线免费观看| 男人天堂无码成人| 欧美不卡在线观看| 91大神在线观看入口| 91成人无码看片在线观看网址| 国产成人精品电影| 手机免费av| 国产91人| 精品国产123| 丰满人妻一区二区三区四区不卡 | 影音先锋男人你懂的| 围产精品久久久久久久| 东京热国产| 男女激情网站| 2014亚洲天堂| 黄片视频在线免费播放| 精品亚洲成人| 色婷婷国产精品综合在线观看| 五月天开心网| 免费看一级无码成人片| 一见钟情的韩国电影| 一本色道久久88综合无码| 精品三级网站| 视色视频在线观看18| 人妻熟女一区二区| 无码h| 国产曰韩欧美综合另类在线| 五月婷婷色色网| 日韩一级片在线| 黄色片在线观看视频| 精品一区二区三区四区视频| 中文字幕在线一区| 亚洲精品国产精品乱码视99| 大鸡巴久久久久| 国产jizz| 婷婷丁香五月综合| 国产午夜成人福利在线| 亚洲欧洲无码在线| 色就操| 四虎成人电影| 日韩日屄视频| 人人干人人爱| 青青草综合| 精品三级在线观看| 欧美日韩大片| 亚洲精品一区二区三区在线观看 | 特级西西| 可以免费看av的网站| 九九亚洲| 热无码| 成人精品网| 男女啪啪啪网站| 亚洲福利视频网站| 亚洲午夜成人| 91人妻人人澡人人爽人人精品 | 中文字幕免费中文| 夜色88V精品国产亚洲| 大香蕉伊人AV| www.大鸡巴| 日韩AV毛| 亚洲熟妇AV日韩熟妇在线| 一区二区三区四区在线播放| 天天草天天射| 中文字幕高清免费看| 激情五月天在线视频| 西西特级WWW444无码| 色呦呦中文字幕| 青娱AV| 狠狠se| 午夜AV在线免费观看| 丁香五月婷婷综合| 麻豆精东一区二区欧美国产| 中文字幕在线播放av| 河南乱子伦视频国产| 自拍偷拍视频网站| 伊人色女操穴综合网| www.91在线视频| 亚洲乱码中文字幕| 色婷婷视频在线| 北条麻妃在线观看香蕉| 人人操人人妻人人看| 亚洲精品乱码久久久久久| 91丨九色丨熟女老版| 免费看一级高潮毛片| 国产精品久久久久无码AV| 国产V在线观看| 欧美成人精品欧美一级乱黄| 欧美无遮挡| 日韩国产| 亚洲精品日韩无码| 日韩精品一区二区三区四区| 在线观看av资源| 成年人黄色电影| 91你懂的| 在线91网站| 色欲影音| 小處女末发育嫩苞AV| 国产色婷婷一区二区| 国产91在线一区| 国产精品18禁| 亚洲精品综合| 成年人免费公开视频| 欧洲成人午夜精品无码区久久| 天堂在线| 午夜H片| 成人免费精品| 一区二区三区高清无码| 日韩免费在线观看一区入口 | 最新国产视频| 亚洲无码免费看| 很很撸在线视频| 欧美三级网站在线观看| 精品一区在线| 亚洲精品天堂无码| 日韩日日夜夜| 中文字幕AV在线观看| 亚洲伊人在线| 熟女人妻在线| 天天添天天操| 在线成人亚洲| 五月天婷婷影院影院| 国产三级网| 69成人精品视频| 伊人五月天| 怡红院男人的天堂| 伊人久久在线| 亚洲日韩欧美一厂二区入| 亚洲日韩Av无码中文字幕美国| 懂色一区二区三区免费| 日韩无码av电影| 亚洲人网站| 亚洲无吗在线视频| 午夜黄色大片| 91蝌蚪丨人妻丨丝袜| 日本精品在线观看视频| 免费观看黄色视频网站| 麻豆AV96熟妇人妻| 午夜福利视频无码| 欧洲亚洲免费视频| 亚洲AV秘无码一区二三月夜| 美女大吊,网站视频| 自拍天堂| 国产精品午夜福利| 91精品老司机| 嫩草入口| 久久精品视频在线| 亚洲五月激情| 丁香五月婷婷五月天| 麻豆三级电影| 在线国产激情视频| 久久久久无码| 天堂成人在线视频| 亚洲男女网站| 久久伊人影院| 国产午夜福利免费视频在线观看 |