CPU:中央處理器(CPU,Central Processing Unit)是一塊超大規模的內建電路,是一台計算機的運算核心(Core)和控制核心( Control Unit)。它的功能主要是解釋計算機指令以及處理計算機軟體中的資料

二、首先要明确實體cpu個數、核數、邏輯cpu數的概念
1.實體cpu數:主機闆上實際插入的cpu數量,可以數不重複的 physical id 有幾個(physical id)
2.cpu核數:單塊CPU上面能處理資料的晶片組的數量,如雙核、四核等 (cpu cores)
3.邏輯cpu數:一般情況下,邏輯cpu=實體CPU個數×每顆核數,如果不相等的話,則表示伺服器的CPU支援超線程技術(HT:簡單來說,它可使處理器中的1 顆核心如2 顆核心那樣在作業系統中發揮作用。這樣一來,作業系統可使用的執行資源擴大了一倍,大幅提高了系統的整體性能,此時邏輯cpu=實體CPU個數×每顆核數x2)
# 檢視實體CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 檢視每個實體CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 檢視邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l
----------------------------------------------------------------------
CPU的運作原理就是:
1、取指令:CPU的控制器從記憶體讀取一條指令并放入指令寄存器。指令的格式一般是這個樣子滴:
操作碼就是彙編語言裡的mov,add,jmp等符号碼;操作數位址說明該指令需要的操作數所在的地方,是在記憶體裡還是在CPU的内部寄存器裡。
2、指令譯碼:指令寄存器中的指令經過譯碼,決定該指令應進行何種操作(就是指令裡的操作碼)、操作數在哪裡(操作數的位址)。
3、 執行指令,分兩個階段“取操作數”和“進行運算”。
4、 修改指令計數器,決定下一條指令的位址。
------------------------------------------------------------------------------------------------------------------------------------------------------
擷取cpu資料:vmstat 2
字段含義說明:(參考文檔:https://www.cnblogs.com/tommyli/p/3746187.html)
類别 | 項目 | 含義 | 說明 |
Procs(程序) | r | 等待執行的任務數 | 展示了正在執行和等待cpu資源的任務個數。當這個值超過了cpu個數,就會出現cpu瓶頸。 |
B | 等待IO的程序數量 | ||
Memory(記憶體) | swpd | 正在使用虛拟的記憶體大小,機關k | |
free | 空閑記憶體大小 | ||
buff | 已用的buff大小,對塊裝置的讀寫進行緩沖 | ||
cache | 已用的cache大小,檔案系統的cache | ||
inact | 非活躍記憶體大小,即被标明可回收的記憶體,差別于free和active | 具體含義見:概念補充(當使用-a選項時顯示) | |
active | 活躍的記憶體大小 | 具體含義見:概念補充(當使用-a選項時顯示) | |
Swap | si | 每秒從交換區寫入記憶體的大小(機關:kb/s) | |
so | 每秒從記憶體寫到交換區的大小 | ||
IO | bi | 每秒讀取的塊數(讀磁盤) | 現在的Linux版本塊的大小為1024bytes |
bo | 每秒寫入的塊數(寫磁盤) | ||
system | in | 每秒中斷數,包括時鐘中斷 | 這兩個值越大,會看到由核心消耗的cpu時間會越多 |
cs | 每秒上下文切換數 | ||
CPU(以百分比表示) | Us | 使用者程序執行消耗cpu時間(user time) | us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期超過50%的使用,那麼我們就該考慮優化程式算法或其他措施了 |
Sy | 系統程序消耗cpu時間(system time) | sys的值過高時,說明系統核心消耗的cpu資源多,這個不是良性的表現,我們應該檢查原因。 | |
Id | 空閑時間(包括IO等待時間) | ||
wa | 等待IO時間 | Wa過高時,說明io等待比較嚴重,這可能是由于磁盤大量随機通路造成的,也有可能是磁盤的帶寬出現瓶頸。 |
常見問題處理
如果r經常大于4,且id經常少于40,表示cpu的負荷很重。
如果pi,po長期不等于0,表示記憶體不足。
如果disk經常不等于0,且在b中的隊列大于3,表示io性能不好。
1.)如果在processes中運作的序列(process r)是連續的大于在系統中的CPU的個數表示系統現在運作比較慢,有多數的程序等待CPU。
2.)如果r的輸出數大于系統中可用CPU個數的4倍的話,則系統面臨着CPU短缺的問題,或者是CPU的速率過低,系統中有多數的程序在等待CPU,造成系統中程序運作過慢。
3.)如果空閑時間(cpu id)持續為0并且系統時間(cpu sy)是使用者時間的兩倍(cpu us)系統則面臨着CPU資源的短缺。
解決辦法:
當發生以上問題的時候請先調整應用程式對CPU的占用情況.使得應用程式能夠更有效的使用CPU.同時可以考慮增加更多的 CPU. 關于CPU的使用情況還可以結合mpstat, ps aux top prstat –a等等一些相應的指令來綜合考慮關于具體的CPU的使用情況,和那些程序在占用大量的CPU時間.一般情況下,應用程式的問題會比較大一些.比如一些 sql語句不合理等等都會造成這樣的現象.
記憶體問題現象:
記憶體的瓶頸是由scan rate (sr)來決定的.scan rate是通過每秒的始終算法來進行頁掃描的.如果scan rate(sr)連續的大于每秒200頁則表示可能存在記憶體缺陷.同樣的如果page項中的pi和po這兩欄表示每秒頁面的調入的頁數和每秒調出的頁數. 如果該值經常為非零值,也有可能存在記憶體的瓶頸,當然,如果個别的時候不為0的話,屬于正常的頁面排程這個是虛拟記憶體的主要原理.
解決辦法:
1.調節applications & servers使得對記憶體和cache的使用更加有效.
2.增加系統的記憶體.
3. Implement priority paging in s in pre solaris 8 versions by
adding line "set priority paging=1" in /etc/system. Remove this line if
upgrading from Solaris 7 to 8 & retaining old /etc/system file.
關于記憶體的使用情況還可以結ps aux top prstat
–a等等一些相應的指令來綜合考慮關于具體的記憶體的使用情況,和那些程序在占用大量的記憶體.一般情況下,如果記憶體的占用率比較高,但是,CPU的占用很低
的時候,可以考慮是有很多的應用程式占用了記憶體沒有釋放,但是,并沒有占用CPU時間,可以考慮應用程式,對于未占用CPU時間和一些背景的程式,釋放内
存的占用。
-------------------------------------------------
随着使用者的增多,如果cpu使用率沒有變化,肯定是x線程有問題,要麼死鎖,要麼等待。