LinuxCPU和內存

一、top

     1.查看內存

        cpu ,當前進程task數目, 每個進程的cpu, 內存使用率, 用top 命令:

在這個頁面,按 P,下面的進程排序,以cpu使用率降序排列。

按M,按內存使用率降序排列;

按N, 按進程id大小降序排列;

top - 

 up 後的字段展示,虛擬機運行時間(19小時24分鐘),

1 user表示一個用戶處於連接 狀態,

load average: 1.15, 1.42, 1.44 — load average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。
load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。

Tasks — 任務(進程),系統現在共有183個進程,其中處於運行中的有1個,182個在休眠(sleep),stoped狀態的有0個,zombie狀態(殭屍)的有0個。

第三行:cpu狀態
6.7% us — 用戶空間佔用CPU的百分比。
0.4% sy — 內核空間佔用CPU的百分比。
0.0% ni — 改變過優先級的進程佔用CPU的百分比
92.9% id — 空閒CPU百分比
0.0% wa — IO等待佔用CPU的百分比
0.0% hi — 硬中斷(Hardware IRQ)佔用CPU的百分比
0.0% si — 軟中斷(Software Interrupts)佔用CPU的百分比

如果該linux機子是虛擬機,還有另外一個字段

( st : time stolen from this vm by the hypervisor    表示hypervisor從這個vm竊取的時間)

第四行:內存狀態

總量:1020000k

已使用:144964k

空閒量:875036k

緩存的內存量:12456k

第五行:交換區狀態

意義同內存狀態欄

2.看內存,一般用 free 命令:

解釋一下:

第二行: 是從操作系統的角度來看的, buffers , cached 都屬於被使用。used = 898212=內核(OS)使用+Application(X, Oracle,etc)使用的+buffers+cached;

第三行: 是從應用程序的角度來看的,對於應用程序來說,buffer和cache都是可用的。應爲buffer和cache是爲了提高程序的讀寫性能,當應用程序需要用到內存的時候,buffer和cache會很快被收回。 所以對於應用程序來講, 可用內存 = free memory +buffers + cached.

二、vmstat

top是給Linux設計的。在FreeBSD VM裏面的Free概念和其他OS完全不同,使用top查看Free內存對於FreeBSD來說可以說沒什麼意義。正確的方法是看vmstat。

vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫, 是實時系統監控工具。該命令通過使用knlist子程序和/dev/kmen僞設備驅動器訪問這些數據,輸出信息直接打印在屏幕。vmstat反饋的與CPU相關的信息包括:
(1)多少任務在運行
(2)CPU使用的情況
(3)CPU收到多少中斷
(4)發生多少上下文切換

使用方法:

一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是採樣的時間間隔數,單位是秒,第二個參數是採樣的次數,如:

root@ubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 3498472 315836 3819540    0    0     0     1    2    0  0  0 100  0

2表示每個兩秒採集一次服務器狀態,1表示只採集一次。

 Vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 100152 2436 97200 289740 0 1 34 45 99 33 0 0 99 0

procs
r 列表示運行和等待cpu時間片的進程數,如果長期大於1,說明cpu不足,需要增加cpu。當這個值超過了CPU數目,就會出現CPU瓶頸了。
b 列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。
cpu 表示cpu的使用狀態
us 列顯示了用戶方式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化用戶的程序。
sy 列顯示了內核進程所花費的cpu時間的百分比。這裏us + sy的參考值爲80%,如果us+sy 大於 80%說明可能存在CPU不足。系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
wa 列顯示了IO等待所佔用的CPU時間的百分比。這裏wa的參考值爲30%,如果wa超過30%,說明IO等待嚴重,這可能是磁盤大量隨機訪問造成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸造成的(主要是塊操作)。 
id 列顯示了cpu處在空閒狀態的時間百分比。空閒 CPU時間,一般來說,id + us + sy = 100,一般我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
system 顯示採集間隔內發生的中斷數
in 列表示在某一時間間隔中觀測到的每秒設備中斷數。
cs列表示每秒產生的上下文切換次數,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程可以由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
memory
swpd 切換到內存交換區的內存數量(k表示)。如果swpd的值不爲0,或者比較大,比如超過了100m,只要si、so的值長期爲0,系統性能還是正常。否則,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那麼你該升級內存了或者把耗內存的任務遷移到其他機器。
free 當前的空閒頁面列表中內存數量(k表示) 
buff 作爲buffer cache的內存數量,一般對塊設備的讀寫才需要緩衝。 
cache: 作爲page cache的內存數量,一般作爲文件系統的cache,如果cache較大,說明用到cache的文件較多,如果此時IO中bi比較小,說明文件系統效率比較好。 
swap
si 由內存進入內存交換區數量。
so由內存交換區進入內存數量。 
IO
bi 從塊設備讀入數據的總量(讀磁盤)(每秒kb)。
bo 塊設備寫入數據的總量(寫磁盤)(每秒kb)
這裏我們設置的bi+bo參考值爲1000,如果超過1000,而且wa值較大應該考慮均衡磁盤負載,可以結合iostat輸出來分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章