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