CPU利用率異常分析討論會 基本概念類問題

2021-07-26 22:44:31 字數 1457 閱讀 9981

(一) cpu的占用是怎麼產生的?為什麼不同os下的cpu利用率不同?

作業系統是用來排程任務(程序)和管理外圍裝置的系統,作業系統採用自己的程序排程策略將程序排程到cpu上執行,占用了cpu時間片,由此產生了cpu的占用。

為什麼不同os下的cpu利用率不同呢?有以下幾方面的原因:

1. 不同的作業系統管理外圍裝置的方法、程序排程的演算法、記憶體管理的演算法等等有差異,因此同乙個應用在不同的os下的cpu消耗可能不一樣。

2. 同乙個應用安裝在不同的裝置上(包括硬體+os+系統軟體),並不能保證引數都是一樣的。即使是同乙個版本的os,由於應用和os的引數配置太多,可能某個引數配的不一樣,相差很大的cpu利用率都是可能的。舉幾個例子,

例一:乙個採用檔案系統,另乙個採用裸裝置

例二:乙個設定了cpu摺疊,乙個沒設定

例三:乙個寫磁碟是按照4k寫入,另乙個按照64k寫入,那麼diskbusy的百分比相差很大,cpu的繁忙程度也略有不同

3. 不同os上,cpu數讀工具的統計方法可能不一樣,即使是同乙個os,不同的cpu讀數工具的統計方法也可能不一樣。

有人提到,「linux on power的處理器利用率比aix的處理器利用率相比少得多」,這個現象並不奇怪。即使都是aix,同乙個應用在aix61上和aix71上,cpu利用率也不同,我做過實驗,aix71相比aix61做了一定的優化。

(二) 為什麼多核cpu的利用率分布不均勻

問題:在aix系統,利用topas檢視時,發現只有乙個cpu的利用率很高,其他的core利用率幾乎為零,怎麼可以調整引數,使得其他的core的利用率增大,在linux下的問題同樣的疑問。

從應用角度,很可能應用是個單程序,不能分到多個cpu上執行。如果已經是個多程序應用,那就可能併發數設定為1了,需調大併發數後才能分配到多個核執行。

從作業系統層面,系統會把程序排程到上一次使用的cpu,以避免程序的上下文切換。乙個cpu幹的好好的,當然不會調到其他cpu,不然上下文切換代價大。因此,如果壓力不是很大的時候,當然是只有乙個core的利用率較大,而其他core是閒置狀態。

(三) cpu利用率的正常使用範圍是多少?

一般來說,生產執行環境中cpu 70%會報警。有些謹慎、保守的單位,cpu超過40%就著手擴容了。

但並不是說cpu一超過70%就一定是異常,對於夜間的批處理業務,可能更多的是期望它盡多占用cpu、盡快處理完成,以免影響第二天的開門。

(四) cpu利用率當中的sys%高是什麼原因?

如果系統態佔比比較大,一般有以下幾類原因:

1. 為了追求效率,減少使用者態到系統態的轉換,把使用者態的function改到系統態,例如:一些驅動程式,以顯示卡驅動最為常見

2. 系統有io問題

3. 應用設計問題

例1:頻繁呼叫sync函式做快取到磁碟的資料同步,就會產生大量sys%,並且這個sys%中,大量的是kernel態的wait和sync。

例2:反覆load/unload so檔案。

例3:阻塞方式的網路收發

cpu利用率 CPU利用率錯誤

cpu利用率 cpu利用率是每個人用來衡量處理器效能的指標。netflix的高階效能架構師布倫丹 格雷格 brendan gregg 在第16屆年度南加州linux expo scale 上稱其為 五分鐘公共服務公告 但 cpu卻是一種誤導性的衡量指標,說明處理器的實際繁忙程度。布倫丹在他的閃電演講...

SQL SERVER 檢視CPU利用率

檢視cpu利用率 create procedure sp gettop10 cpu as begin set nocount on declare cinterval char 8 declare interval int set cinterval 00 00 10 create table th...

SQL SERVER 檢視CPU利用率

檢視cpu利用率 create procedure sp gettop10 cpu as begin set nocount on declare cinterval char 8 declare interval int set cinterval 00 00 10 create table th...