CPU、記憶體、磁碟IO之間的關係
一、名詞解釋
CPU :工人,幹活的,判斷以及邏輯處理。
記憶體: 車間,工人幹活的地方,車間中加工原料,當車間中沒有原料了,在從倉庫中取原料,對原料進行加工
記憶體本身有一定的儲存空間,對記憶體中的資料進行處理的速度比從硬碟取資料再處理的速度快很多。
硬碟 :倉庫,原料,資料儲存。
二、三者之間的關係
CPU對資料進行判斷以及邏輯處理,本身不能儲存資料,這時cpu從記憶體取資料進行邏輯計算,如果記憶體沒有資料,才會從硬碟讀資料到記憶體,再對資料進行處理。
就像人吃飯一樣,cpu就是人,記憶體就是碗,硬碟就是飯鍋!
當cpu程式等待,會造成記憶體開銷的增加,記憶體不夠用的時候會用到虛擬記憶體,導致虛擬記憶體的增加,這時磁碟IO開銷就會增加,系統態sy%提升,cpu開銷增加;記憶體裡資料不夠用,才用磁碟中取資料。
三、效能高因素
1、系統CPU利用率高是什麼原因?
系統中斷和切換頻繁很耗用CPU,共享資源競爭,大量io互動。CPU太差,主頻太低,都是形容CPU差。
蘋果系統一直是單執行緒,因為這樣減少了N多插隊的請求導致的中斷減速.
2、使用者CPU利用率高是什麼原因?
計算量大,比如運算,連線查詢,資料統計;
非空閒等待,比如IO等待、資源爭用(同一資源被不同執行緒請求,而此資源又需要保持一致性,只能前一個釋放後一個
再訪問,這樣導致的等待);
過多的系統呼叫,系統呼叫即呼叫作業系統提供的程式介面,比如Java專案中寫日誌,會呼叫系統介面進行日誌寫操作,這樣
會導致系統CPU使用率過高;
過多的中斷,中斷是CPU用來響應請求的機制,比如鍵盤的輸入,滑鼠的點選等都會產生中斷,中斷是通知CPU有任務需
要響應,CPU停下正在執行的程式來響應當前的中斷;
3、記憶體吃緊的原因?
多數是過多的頁交換和記憶體洩漏
頁交換:記憶體不夠用來儲存需要的資料時,作業系統會把原記憶體中的部分內容釋放掉(移除或者存入磁碟),然後把需要
的內容載入,這個過程就是頁交換。
4、下面IO高的原因是?
讀寫量大;磁碟太慢,是因為轉速慢,或者磁頭少,或者RAID 型號不太OK(RAID 有 0 1 5 10 100 等等,有的可以做儲存盤,有的可以做備份盤);
記憶體不足,作業系統就會用虛擬記憶體,肯定要用系統的交換區了,比如LINUX 的SWAP,就造成分頁增多;
如果你是老闆,你如何檢查打工仔的效率(效能)呢? 我們一般會透過以下這些資訊來判斷打工仔是否偷懶:
(1)、打工仔接受和完成多少任務並向老闆彙報了(中斷);
(2)、打工仔和老闆溝通、協商每項工作的工作進度(上下文切換);
(3)、打工仔的工作列表是不是都有排滿(可執行佇列);
(4)、打工仔工作效率如何,是不是在偷懶(CPU 利用率);
四、系統中的上下文切換 、執行佇列等
上下文切換 :每個CPU(或多核CPU的每個核心)在同一時間只能執行一個執行緒<不包括超執行緒CPU>,Linux採用搶佔式排程。
當執行緒執行到達一個時間片後,如果執行緒有IO阻塞或高優先順序執行緒要執行的時候,Linux將執行執行緒切換,切換前先儲存當
前執行緒執行狀態(現場),並恢復待執行執行緒狀態,這個過程就叫做上下文切換。在Java應用中,檔案IO、網路IO、鎖等待、線
程Sleep操作都會使該執行緒進行阻塞或睡眠狀態,從而觸發上下文切換。頻繁的上下文切換會造成核心佔用較高的CPU,使得
響應速度下降。
執行佇列 :每個CPU核心都維護了一個可執行佇列,例如一個4核CPU,啟動8個執行緒,且8個執行緒都處於可執行狀態,平均
分配情況下,每個核心的可執行佇列裡就有2個執行緒。通常而言,系統的load是由CPU執行佇列決定的,假設以上狀態 維持
了1分鐘,則1分鐘內系統load就是2。執行佇列值越大,代表執行緒要消耗越長的時間才能執行完成。通常建議每個核心執行
佇列為1-3個。
利用率 :CPU利用率指在使用者程式,核心,中斷處理,IO等待以及空閒五個部分百分比,這五個值是用來分析CPU消耗情
況的關鍵指標。Linux System and NetWork Performent Monitoring建議使用者程式/核心消耗比例為 65%-70% / 30%-3
5% 左右。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2650835/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記憶體與IO,磁碟IO,網路IO記憶體
- Docker之CPU和記憶體磁碟設定(八)Docker記憶體
- CPU、記憶體、快取的關係詳細解釋!記憶體快取
- docker的資源控制(CPU、記憶體、IO)Docker記憶體
- 效能調優(cpu/IO/JVM記憶體分析)JVM記憶體
- Oracle 12c系列(四)|資源隔離之IO、記憶體、CPUOracle記憶體
- 作業系統記憶體管理:頁、頁表項和頁框之間的關係作業系統記憶體
- 堆疊和記憶體的關係 細說記憶體
- 如何使用 Docker 來限制 CPU、記憶體和 IO等資源?Docker記憶體
- Winrm 獲取遠端windows伺服器 cpu、磁碟、記憶體Windows伺服器記憶體
- JavaScript之記憶體空間JavaScript記憶體
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體
- 如何用bash shell 指令碼監控 Linux記憶體、磁碟和 CPU?指令碼Linux記憶體
- 記憶體CPU監控記憶體
- CPU快取記憶體快取記憶體
- 【java】類之間的關係Java
- io記憶體,io埠,彙編 in out 指令記憶體
- 記憶體和磁碟設計記憶體
- RabbitMQ - 記憶體磁碟監控MQ記憶體
- Window、WindowManager、View 之間的關係View
- git、github、gitlab之間的關係GithubGitlab
- 程式間通訊之共享記憶體記憶體
- 系統服務監控指標--load、CPU利用率、磁碟剩餘空間、磁碟I/O、記憶體使用情況等指標記憶體
- CPU和記憶體如何互動的記憶體
- Linux下檢視CPU型號,記憶體大小,硬碟空間的命令Linux記憶體硬碟
- Linux-記憶體和磁碟管理Linux記憶體
- Linux程式間通訊之共享記憶體Linux記憶體
- TLS與SSL之間關係TLS
- Linux記憶體效能指標和工具的對應關係圖Linux記憶體指標
- 類與類之間的基本關係
- 思考 TPS 與 RT 之間的關係
- Window, WindowManager和WindowManagerService之間的關係
- React、Ant Design、DvaJS之間的關係ReactJS
- Activity、View、Window之間關係的分析View
- UML類圖--類之間的關係
- CPU快取和記憶體屏障快取記憶體
- 談談CPU快取記憶體快取記憶體
- iOS底層原理(一):OC物件實際佔用記憶體與開闢記憶體關係iOS物件記憶體