Linux診斷監控

1、CPU核數


    1)top按1
    2)cat /proc/cpuinfo

    

    3)lscpu:

    

    CPU(s):                 #邏輯cpu顆數 
    Thread(s) per core:     #每個核心線程 
    Core(s) per socket:     #每個cpu插槽核數/每顆物理cpu核數 


    4) 物理CPU:cat /proc/cpuinfo |grep "physical id" |sort|uniq|wc -l

    
    5)core id:cat /proc/cpuinfo |grep "core id" |sort|uniq|wc -l 

    
    6)總核數 = 物理CPU個數 X 每顆物理CPU的核數
    7)總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數(cat /proc/cpuinfo| grep "processor"| wc -l)

    

2、CPU佔用率


    看CPU是否有問題,看CPU總的佔用率
    

3、平均負載

    
    含義:過去的1,5,15分鐘的平均負載
    平均負載:平均的活躍進程數(運行(R),可運行(S),不可中斷(D)),特點:歷史、平均、趨勢。

    不能表示實時負載,可以用來看趨勢,進程的負載長度

    引申:進程狀態

    
    
    忙的趨勢是可接受還是不可接受?
        Load<0.7核數   負載不高,不忙
        0.7核數<Load<3*核數    不清楚,需要繼續分析
        Load>3*核數  負載高,忙


    Cpu佔用率和平均負載的關係
        1)平均負載load average高,就一定cpu佔用率高嗎?
            平均負載高,意味着進程多。
            A.如果這些進程每個進程佔用cpu也高的話(代碼複雜度高,有大量循環)(cpu密集進程,視頻編碼,人工智能,圖片處理),就肯定服務器系統cpu佔比高
            B.如果這些進程每個進程佔用cpu很低的話(IO密集型進程,讀寫數據,佔用cpu很低),就肯定服務器系統cpu佔比不高
        2)cpu佔用高,就一定平均負載load average高嗎?
            A.    不一定:如果cpu佔用高,但是隻有少量進程,多核cpu,
            B.    有可能:如果cpu佔用高,同時有很多進程運行,就會load average高

        3)平均負載高有哪些原因造成?
            進程多造成,應用程序,cpu密集型,任務多,要大量統計,計算,如何進一步分析?看vmstat 的R列,如果R多,就 用top進一步分析進程,進一步dump線程,如果B列多,就分析IO


4、top 

    top分析:
    1)Id-低,意味着cpu有瓶頸
    2)Us-高,繼續用top監控進程(找出cpu佔比高的進程),dump線程
    3)Sy-高,看內核可以優化的內核參數(一般較少出現問題 )
那麼對於內核態造成的佔用高和用戶態造成的佔用高,要考慮下一步怎麼分析,什麼導致的高,往哪個方向考慮
    4)Wa-高,進一步分析IO
    5)Si-高,進一步分析網絡

    top高級用法:

    1)按top,然後按h可進入top的幫助界面:
    
    2)改變top的刷新時間爲1秒:top -> d -> 1 -> Enter,按W保存
    
    看到如下信息說明保存成功:
    
    3)按F可進入到排序,如下可以看到是按CPU排序:
    
    按cpu排序:top命令後,輸入大寫的P;按內存排序:top命令後,輸入大寫的M,修改排序之後要在top界面按W保存
    4)增加字段,如下:top ->f/F -> 上下鍵光標移到到要添加的字段 -> d -> 要添加的字段前面出現*說明添加成功,可按d刪除添加的字段
    
    回到top界面按c,可看到增加的幾列字段
    也可參考:https://www.cnblogs.com/ronli/p/centos-top.html
    5)寫一個簡單的top腳本:top -b -d 1 -n 3 > top.log,每1秒採集一次,共採集3次寫到top.log裏面 
    取Cpu:grep Cpu top.log
    

 

5、vmstat


    對操作系統整體的虛擬內存、進程、CPU活動進行監控
    vmstat 1 5:每1秒採集一次服務器狀態,採集5次

    

    分析:

        1)vmstat+top
        2)當cpu佔比比較高,同時看到us比較高,往進程方向想
        3)swap數據,不一定mem有問題,還要結合free,buff,cache
        4)單獨的數據,無法判斷,進行長時間監控,時間拉長
        5)內存問題導致bo,IO問題,導致cpu

    場景:

        1)應用進程佔用導致cpu佔比高
        2)內存不夠導致cpu佔比高
        3)大量讀造成cpu佔比高

6、中斷和中斷打散

    

    案列:由下圖中看出,幾秒只能增加了93(6428-6335)箇中斷

   

    當出現很多中斷都在一個cpu時,就需要中斷打散,如:echo 2 > /proc/irq/90/smp_affinity

   

    

7、上下文切換

    1)進程調度

        背景:多任務,多進程處理的操作系統
        cpu時間分片:
            a)cpu時間片,用完就被掛起,輪流分配,切換
            b)與進程優先級有關,掛起,切換
            c) 進程進入睡眠狀態,掛起,切換
            d)等待資源,資源不足,掛起,切換

    2)上下文切換

        a)什麼是上下文切換?
            上下文:存儲cpu正在執行的位置,下一條指令位置(寄存器,程序計數器)
            上下文切換:保存上一個任務進度的上下文到內核,加載新任務進程的上下文,且運行心任務,再次調度上一個任務,看 起來連續運行
        b)上下文切換與性能的關係?
            切換次數多,cpu時間花費在保存上下文上面
        c)上下文切換次數多少算高?
            ①cup性能
            ②系統上下文切換次數趨勢穩定,就沒有問題
            ③出現突然增長,或者超過1萬次以上,就要分析
            ④上下文切換次數多:  A)就是進程在等待資源,進一步監控內存,I/O
                                                B)cpu本身的瓶頸
                                                C)同時中斷次數多,去分析中斷處理程序,查看/proc/interrupts,cpu的分佈,進一步分析中斷的原因

 

8、內存

    內存相關概率(虛擬內存,物理內存,buffer,cache,swap,映射)

    

  內存佔用使用如下公式(注意,基於centos7):(mem.used+swap.used)/mem.total+swap.total


    清除緩存:

    

 

    

    虛擬內存詳解:https://blog.csdn.net/qq_38410730/article/details/81036768

 

 

   

            

 

    

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章