天天看點

伺服器硬體資源_CPU

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

伺服器硬體資源_CPU

二、首先要明确實體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的控制器從記憶體讀取一條指令并放入指令寄存器。指令的格式一般是這個樣子滴:

  

伺服器硬體資源_CPU

  操作碼就是彙編語言裡的mov,add,jmp等符号碼;操作數位址說明該指令需要的操作數所在的地方,是在記憶體裡還是在CPU的内部寄存器裡。

  2、指令譯碼:指令寄存器中的指令經過譯碼,決定該指令應進行何種操作(就是指令裡的操作碼)、操作數在哪裡(操作數的位址)。

  3、 執行指令,分兩個階段“取操作數”和“進行運算”。

  4、 修改指令計數器,決定下一條指令的位址。

  

伺服器硬體資源_CPU

------------------------------------------------------------------------------------------------------------------------------------------------------

擷取cpu資料:vmstat 2

伺服器硬體資源_CPU

字段含義說明:(參考文檔: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線程有問題,要麼死鎖,要麼等待。