您好,登錄后才能下訂單哦!
Linux中性能監控和優化命令分別是哪些呢,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
top 命令是 Linux 下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于 Windows 的任務管理器。
下面詳細介紹它的使用方法。top 是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態。如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程序為止。
比較準確的說,top 命令提供了實時的對系統處理器的狀態監視。它將顯示系統中 CPU最“敏感”的任務列表。該命令可以按 CPU 使用。
內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定。
命令格式:
top [參數]
命令功能:
顯示當前系統正在執行的進程的相關信息,包括進程ID、內存占用率、CPU占用率等
命令參數:
-b 批處理
-c 顯示完整的治命令
-I 忽略失效過程
-s 保密模式
-S 累積模式
-i<時間> 設置間隔時間
-u<用戶名> 指定用戶名
-p<進程號> 指定進程
-n<次數> 循環顯示的次數
實例1:顯示進程信息
命令:top
輸出:
[root@TG1704 log]# toptop - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie Cpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 32949016k total, 14411180k used, 18537836k free, 169884k buffers Swap: 32764556k total, 0k used, 32764556k free, 3612636k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java 18249 root 18 0 3201m 1.9g 11m S 35.9 6.0 569:39.41 java 2808 root 25 0 3333m 1.0g 11m S 24.3 3.1 526:51.85 java 25668 root 23 0 3180m 704m 11m S 14.0 2.2 360:44.53 java 574 root 25 0 3168m 611m 10m S 12.6 1.9 556:59.63 java 1599 root 20 0 3237m 1.9g 11m S 12.3 6.2 262:01.14 java 1008 root 21 0 3147m 842m 10m S 0.3 2.6 4:31.08 java 13823 root 23 0 3031m 2.1g 10m S 0.3 6.8 176:57.34 java 28218 root 15 0 12760 1168 808 R 0.3 0.0 0:01.43 top 29062 root 20 0 1241m 227m 10m S 0.3 0.7 2:07.32 java 1 root 15 0 10368 684 572 S 0.0 0.0 1:30.85 init 2 root RT -5 0 0 0 S 0.0 0.0 0:01.01 migration/0 3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 5 root RT -5 0 0 0 S 0.0 0.0 0:00.80 migration/1 6 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1 8 root RT -5 0 0 0 S 0.0 0.0 0:20.59 migration/2 9 root 34 19 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/2 10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2 11 root RT -5 0 0 0 S 0.0 0.0 0:23.66 migration/3 12 root 34 19 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/3 13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/3 14 root RT -5 0 0 0 S 0.0 0.0 0:20.29 migration/4 15 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/4 16 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/4 17 root RT -5 0 0 0 S 0.0 0.0 0:23.07 migration/5 18 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/5 19 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/5 20 root RT -5 0 0 0 S 0.0 0.0 0:17.16 migration/6 21 root 34 19 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/6 22 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/6 23 root RT -5 0 0 0 S 0.0 0.0 0:58.28 migration/7
說明:
統計信息區:前五行是當前系統情況整體的統計信息區。下面我們看每一行信息的具體意義。
第一行,任務隊列信息,同 uptime 命令的執行結果,具體參數說明情況如下:
14:06:23:當前系統時間
up 70 days, 16:44:系統已經運行了70天16小時44分鐘(在這期間系統沒有重啟過的吆!)
2 users:當前有2個用戶登錄系統
load average: 1.15, 1.42, 1.44:load average 后面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。
load average 數據是每隔 5 秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯 CPU 的數量,結果高于5的時候就表明系統在超負荷運轉了。
第二行,Tasks — 任務(進程),具體信息說明如下:
系統現在共有 206 個進程,其中處于運行中的有1個,205 個在休眠(sleep),stoped狀態的有0個,zombie 狀態(僵尸)的有0個。
第三行,cpu狀態信息,具體屬性說明如下:
5.9%us:用戶空間占用CPU的百分比。
3.4% sy:內核空間占用CPU的百分比。
0.0% ni:改變過優先級的進程占用CPU的百分比
90.4% id:空閑CPU百分比
0.0% wa:IO等待占用CPU的百分比
0.0% hi:硬中斷(Hardware IRQ)占用CPU的百分比
0.2% si:軟中斷(Software Interrupts)占用CPU的百分比
備注:在這里CPU的使用比率和windows概念不同,需要理解linux系統用戶空間和內核空間的相關知識!
第四行,內存狀態,具體信息如下:
32949016k total — 物理內存總量(32GB)
14411180k used — 使用中的內存總量(14GB)
18537836k free — 空閑內存總量(18GB)
169884k buffers — 緩存的內存量 (169M)
第五行,swap交換分區信息,具體信息說明如下:
32764556k total — 交換區總量(32GB)
0k used — 使用的交換區總量(0K)
32764556k free — 空閑交換區總量(32GB)
3612636k cached — 緩沖的交換區總量(3.6GB)
備注:
第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核并不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。
如果出于習慣去計算可用內存數,這里有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的 cached,按這個公式此臺服務器的可用內存:18537836k +169884k +3612636k = 22GB左右。
對于內存監控,在 top 里我們要時刻監控第五行 swap 交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。
第六行,空行。
第七行以下:各進程(任務)的狀態監控,項目列信息說明如下:
PID:進程id
USER:進程所有者
PR:進程優先級
NI:nice值。負值表示高優先級,正值表示低優先級
VIRT:進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES:進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR:共享內存大小,單位kb
S:進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程
%CPU:上次更新到現在的CPU時間占用百分比
%MEM:進程使用的物理內存百分比
TIME+:進程使用的CPU時間總計,單位1/100秒
COMMAND:進程名稱(命令名/命令行)
1.多U多核CPU監控
在top基本視圖中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況:
觀察上圖,服務器有16個邏輯CPU,實際上是4個物理CPU。再按數字鍵1,就會返回到top基本視圖界面。
敲擊鍵盤“b”(打開/關閉加亮效果),top的視圖變化如下:
我們發現進程id為2570的“top”進程被加亮了,top進程就是視圖第二行顯示的唯一的運行態(runing)的那個進程,可以通過敲擊“y”鍵關閉或打開運行態進程的加亮效果。
默認進入top時,各進程是按照CPU的占用量來排序的,在下圖中進程ID為28894的java進程排在第一(cpu占用142%),進程ID為574的java進程排在第二(cpu占用16%)。
敲擊鍵盤“x”(打開/關閉排序列的加亮效果),top的視圖變化如下:
可以看到,top默認的排序列是“%CPU”。
4.通過”shift + >”或”shift + <”可以向右或左改變排序列
下圖是按一次”shift + >”的效果圖,視圖現在已經按照%MEM來排序。
free命令可以顯示Linux系統中空閑的、已用的物理內存及swap內存,及被內核使用的buffer。在Linux系統監控的工具中,free命令是最經常使用的命令之一。
free [參數]
free 命令顯示系統使用和空閑的內存情況,包括物理內存、交互區內存(swap)和內核緩沖區內存。共享內存將被忽略
-b 以Byte為單位顯示內存使用情況。
-k 以KB為單位顯示內存使用情況。
-m 以MB為單位顯示內存使用情況。
-g 以GB為單位顯示內存使用情況。
-o 不顯示緩沖區調節列。
-s <間隔秒數> 持續觀察內存使用狀況。
-t 顯示內存總和列。
-V 顯示版本信息。
實例1:顯示內存使用情況
命令:
free free -g free -m
輸出:
[root@SF1150 service]# free total used free shared buffers cached Mem: 32940112 30841684 2098428 0 4545340 11363424-/+ buffers/cache: 14932920 18007192Swap: 32764556 1944984 30819572[root@SF1150 service]# free -g total used free shared buffers cached Mem: 31 29 2 0 4 10-/+ buffers/cache: 14 17Swap: 31 1 29[root@SF1150 service]# free -m total used free shared buffers cached Mem: 32168 30119 2048 0 4438 11097-/+ buffers/cache: 14583 17584Swap: 31996 1899 30097
說明:
下面是對這些數值的解釋:
total:總計物理內存的大小。
used:已使用多大。
free:可用有多少。
Shared:多個進程共享的內存總額。
Buffers/cached:磁盤緩存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行是交換分區SWAP的,也就是我們通常所說的虛擬內存。
區別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別。
這兩個的區別在于使用的角度來看,第一行是從OS的角度來看,因為對于OS,buffers/cached 都是屬于被使用,所以他的可用內存是 2098428 KB,已用內存是30841684KB,其中包括,內核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached。
第三行所指的是從應用程序角度來看,對于應用程序來說,buffers/cached 是等于可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說,可用內存=系統free memory+buffers+cached。
如本機情況的可用內存為:
18007156=2098428KB+4545340KB+11363424KB
接下來解釋什么時候內存會被交換,以及按什么方交換。
當可用內存少于額定值的時候,就會開會進行交換.如何看額定值:
命令:
cat /proc/meminfo
輸出:
[root@SF1150 service]# cat /proc/meminfoMemTotal: 32940112 kB MemFree: 2096700 kB Buffers: 4545340 kB Cached: 11364056 kB SwapCached: 1896080 kB Active: 22739776 kB Inactive: 7427836 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 32940112 kB LowFree: 2096700 kB SwapTotal: 32764556 kB SwapFree: 30819572 kB Dirty: 164 kB Writeback: 0 kB AnonPages: 14153592 kB Mapped: 20748 kB Slab: 590232 kB PageTables: 34200 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 49234612 kB Committed_AS: 23247544 kB VmallocTotal: 34359738367 kB VmallocUsed: 278840 kB VmallocChunk: 34359459371 kB HugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0Hugepagesize: 2048 kB
交換將通過三個途徑來減少系統中使用的物理頁面的個數:
減少緩沖與頁面cache的大小,
將系統V類型的內存頁面交換出去,
換出或者丟棄頁面。(Application 占用的內存頁,也就是物理內存不足)。
事實上,少量地使用swap是不是影響到系統性能的。
那 buffers 和 cached 都是緩存,兩者有什么區別呢?
為了提高磁盤存取效率,Linux 做了一些精心的設計,除了對 dentry 進行緩存(用于VFS,加速文件路徑名到 inode 的轉換),還采取了兩種主要 Cache 方式:Buffer Cache 和Page Cache。前者針對磁盤塊的讀寫,后者針對文件 inode 的讀寫。這些 Cache 有效縮短了 I/O 系統調用(比如 read,write,getdents)的時間。
磁盤的操作有邏輯級(文件系統)和物理級(磁盤塊),這兩種Cache就是分別緩存邏輯和物理級數據的。
Page cache 實際上是針對文件系統的,是文件的緩存,在文件層面上的數據會緩存到page cache。文件的邏輯層需要映射到實際的物理磁盤,這種映射關系由文件系統來完成。當 page cache 的數據需要刷新時,page cache 中的數據交給 buffer cache,因為Buffer Cache 就是緩存磁盤塊的。但是這種處理在 2.6 版本的內核之后就變的很簡單了,沒有真正意義上的 cache 操作。
Buffer cache 是針對磁盤塊的緩存,也就是在沒有文件系統的情況下,直接對磁盤進行操作的數據會緩存到buffer cache中,例如,文件系統的元數據都會緩存到buffer cache中。
簡單說來,page cache 用來緩存文件數據,buffer cache 用來緩存磁盤數據。在有文件系統的情況下,對文件操作,那么數據會緩存到 page cache,如果直接采用dd等工具對磁盤進行讀寫,那么數據會緩存到 buffer cache。
所以我們看linux,只要不用swap的交換空間,就不用擔心自己的內存太少.如果常常swap用很多,可能你就要考慮加物理內存了。這也是linux看內存是否夠用的標準。
如果是應用服務器的話,一般只看第二行,+buffers/cache,即對應用程序來說free的內存太少了,也是該考慮優化程序或加內存了。
實例2:以總和的形式顯示內存的使用信息
命令:
free -t
輸出:
[root@SF1150 service]# free -t total used free shared buffers cached Mem: 32940112 30845024 2095088 0 4545340 11364324-/+ buffers/cache: 14935360 18004752Swap: 32764556 1944984 30819572Total: 65704668 32790008 32914660[root@SF1150 service]#
說明:
實例3:周期性的查詢內存使用信息
命令:
free -s 10
輸出:
[root@SF1150 service]# free -s 10 total used free shared buffers cached Mem: 32940112 30844528 2095584 0 4545340 11364380-/+ buffers/cache: 14934808 18005304Swap: 32764556 1944984 30819572 total used free shared buffers cached Mem: 32940112 30843932 2096180 0 4545340 11364388-/+ buffers/cache: 14934204 18005908Swap: 32764556 1944984 30819572
vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監控。他是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。vmstat 工具提供了一種低開銷的系統性能觀察方式。因為 vmstat 本身就是低開銷工具,在非常高負荷的服務器上,你需要查看并監控系統的健康情況,在控制窗口還是能夠使用vmstat 輸出結果。在學習vmstat命令前,我們先了解一下Linux系統中關于物理內存和虛擬內存相關信息。
物理內存和虛擬內存區別:
我們知道,直接從物理內存讀寫數據要比從硬盤讀寫數據要快的多,因此,我們希望所有數據的讀取和寫入都在內存完成,而內存是有限的,這樣就引出了物理內存與虛擬內存的概念。
物理內存就是系統硬件提供的內存大小,是真正的內存,相對于物理內存,在linux下還有一個虛擬內存的概念,虛擬內存就是為了滿足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存,用作虛擬內存的磁盤空間被稱為交換空間(Swap Space)。
作為物理內存的擴展,linux會在物理內存不足時,使用交換分區的虛擬內存,更詳細的說,就是內核會將暫時不用的內存塊信息寫到交換空間,這樣以來,物理內存得到了釋放,這塊內存就可以用于其free命令可以顯示Linux系統中空閑的、已用的物理內存及swap內存,及被內核使用的buffer。在Linux系統監控的工具中,free命令是最經常使用的命令之一。
free [參數]
free 命令顯示系統使用和空閑的內存情況,包括物理內存、交互區內存(swap)和內核緩沖區內存。共享內存將被忽略
-b 以Byte為單位顯示內存使用情況。
-k 以KB為單位顯示內存使用情況。
-m 以MB為單位顯示內存使用情況。
-g 以GB為單位顯示內存使用情況。
-o 不顯示緩沖區調節列。
-s<間隔秒數> 持續觀察內存使用狀況。
-t 顯示內存總和列。
-V 顯示版本信息。
實例1:顯示內存使用情況
命令:
free free -g free -m
輸出:
[root@SF1150 service]# free total used free shared buffers cached Mem: 32940112 30841684 2098428 0 4545340 11363424-/+ buffers/cache: 14932920 18007192Swap: 32764556 1944984 30819572[root@SF1150 service]# free -g total used free shared buffers cached Mem: 31 29 2 0 4 10-/+ buffers/cache: 14 17Swap: 31 1 29[root@SF1150 service]# free -m total used free shared buffers cached Mem: 32168 30119 2048 0 4438 11097-/+ buffers/cache: 14583 17584Swap: 31996 1899 30097
它目的,當需要用到原始的內容時,這些信息會被重新從交換空間讀入物理內存。
linux的內存管理采取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。
要深入了解linux內存運行機制,需要知道下面提到的幾個方面:
首先,Linux系統會不時的進行頁面交換操作,以保持盡可能多的空閑物理內存,即使并沒有什么事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間。
其次,linux進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內存,linux內核根據”最近最經常使用“算法,僅僅將一些不經常使用的頁面文件交換到虛擬內存,有時我們會看到這么一個現象:linux物理內存還有很多,但是交換空間也使用了很多。其實,這并不奇怪,例如,一個占用很大內存的進程運行時,需要耗費很多內存資源,此時就會有一些不常用頁面文件被交換到虛擬內存中,但后來這個占用很多內存資源的進程結束并釋放了很多內存時,剛才被交換出去的頁面文件并不會自動的交換進物理內存,除非有這個必要,那么此刻系統物理內存就會空閑很多,同時交換空間也在被使用,就出現了剛才所說的現象了。關于這點,不用擔心什么,只要知道是怎么一回事就可以了。
最后,交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁面,它們又會被馬上交換出去,如此以來,虛擬內存中可能沒有足夠空間來存儲這些交換頁面,最終會導致linux出現假死機、服務異常等問題,linux雖然可以在一段時間內自行恢復,但是恢復后的系統已經基本不可用了。
因此,合理規劃和設計linux內存的使用,是非常重要的。
虛擬內存原理:
在系統中運行的每個進程都需要使用到內存,但不是每個進程都需要每時每刻使用系統分配的內存空間。當系統運行所需內存超過實際的物理內存,內核會釋放某些進程所占用但未使用的部分或所有物理內存,將這部分資料存儲在磁盤上直到進程下一次調用,并將釋放出的內存提供給有需要的進程使用。
在Linux內存管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的內存調度。調頁算法是將內存中最近不常使用的頁面換到磁盤上,把活動頁面保留在內存中供進程使用。交換技術是將整個進程,而不是部分頁面,全部交換到磁盤上。
分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內存的過程被稱作Page-In。當內核需要一個分頁時,但發現此分頁不在物理內存中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。
當系統內核發現可運行內存變少時,就會通過Page-Out來釋放一部分物理內存。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當內核管理分頁的時間超過運行程式的時間時,系統效能會急劇下降。這時的系統已經運行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。
vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V]
用來顯示虛擬內存的信息
-a:顯示活躍和非活躍內存
-f:顯示從系統啟動至今的fork數量 。
-m:顯示slabinfo
-n:只在開始時顯示一次各字段名稱。
-s:顯示內存相關統計信息及多種系統活動數量。
delay:刷新時間間隔。如果不指定,只顯示一條結果。
count:刷新次數。如果不指定刷新次數,但指定了刷新時間間隔,這時刷新次數為無窮。
-d:顯示磁盤相關統計信息。
-p:顯示指定磁盤分區統計信息
-S:使用指定單位顯示。參數有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(byte)。默認單位為K(1024 bytes)
-V:顯示vmstat版本信息。
實例1:顯示虛擬內存使用情況
命令:
vmstat
輸出:
說明:
字段說明:
Procs(進程):
r: 運行隊列中進程數量
b: 等待IO的進程數量
Memory(內存):
swpd: 使用虛擬內存大小
free: 可用內存大小
buff: 用作緩沖的內存大小
cache: 用作緩存的內存大小
Swap:
si: 每秒從交換區寫到內存的大小
so: 每秒寫入交換區的內存大小
IO:(現在的Linux版本塊的大小為1024bytes)
bi: 每秒讀取的塊數
bo: 每秒寫入的塊數
系統:
in: 每秒中斷數,包括時鐘中斷。
cs: 每秒上下文切換數。
CPU(以百分比表示):
us: 用戶進程執行時間(user time)
sy: 系統進程執行時間(system time)
id: 空閑時間(包括IO等待時間),中央處理器的空閑時間 。以百分比表示。
wa: 等待IO時間
備注:如果 r經常大于 4 ,且id經常少于40,表示cpu的負荷很重。如果pi,po 長期不等于0,表示內存不足。如果disk 經常不等于0, 且在 b中的隊列 大于3, 表示 io性能不好。Linux在具有高穩定性、可靠性的同時,具有很好的可伸縮性和擴展性,能夠針對不同的應用和硬件環境調整,優化出滿足當前應用需要的最佳性能。因此企業在維護Linux系統、進行系統調優時,了解系統性能分析工具是至關重要的。
命令:
vmstat 5 5
表示在5秒時間內進行5次采樣。將得到一個數據匯總他能夠反映真正的系統情況。
實例2:顯示活躍和非活躍內存
命令:
vmstat -a 2 5
輸出:
[root@localhost ~]# vmstat -a 2 5procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free inact active si so bi bo in cs us sy id wa st 0 0 0 3029752 387728 513008 0 0 0 2 3 2 0 0 100 0 0 0 0 0 3029752 387728 513076 0 0 0 0 1005 34 0 0 100 0 0 0 0 0 3029752 387728 513076 0 0 0 22 1004 36 0 0 100 0 0 0 0 0 3029752 387728 513076 0 0 0 0 1004 33 0 0 100 0 0 0 0 0 3029752 387728 513076 0 0 0 0 1003 32 0 0 100 0 0
說明:
使用-a選項顯示活躍和非活躍內存時,所顯示的內容除增加inact和active外,其他顯示內容與例子1相同。
字段說明:
Memory(內存):
inact: 非活躍內存大小(當使用-a選項時顯示)
active: 活躍的內存大小(當使用-a選項時顯示)
實例3:查看系統已經fork了多少次
命令:
vmstat -f
輸出:
[root@SCF1129 ~]# vmstat -f 12744849 forks [root@SCF1129 ~]#
說明:
這個數據是從/proc/stat中的processes字段里取得的
實例4:查看內存使用的詳細信息
命令:
vmstat -s
輸出:
[root@localhost ~]# vmstat -s 4043760 total memory 1013884 used memory 513012 active memory 387728 inactive memory 3029876 free memory 199616 buffer memory 690980 swap cache 6096656 total swap 0 used swap 6096656 free swap 83587 non-nice user cpu ticks 132 nice user cpu ticks 278599 system cpu ticks 913344692 idle cpu ticks 814550 IO-wait cpu ticks 10547 IRQ cpu ticks 21261 softirq cpu ticks 0 stolen cpu ticks 310215 pages paged in 14254652 pages paged out 0 pages swapped in 0 pages swapped out 288374745 interrupts 146680577 CPU context switches 1351868832 boot time 367291 forks
說明:
這些信息的分別來自于/proc/meminfo,/proc/stat和/proc/vmstat。
實例5:查看磁盤的讀/寫
命令:
vmstat -d
輸出:
[root@localhost ~]# vmstat -ddisk- ------------reads------------ ------------writes----------- -----IO------ total merged sectors ms total merged sectors ms cur sec ram0 0 0 0 0 0 0 0 0 0 0 ram1 0 0 0 0 0 0 0 0 0 0 ram2 0 0 0 0 0 0 0 0 0 0 ram3 0 0 0 0 0 0 0 0 0 0 ram4 0 0 0 0 0 0 0 0 0 0 ram5 0 0 0 0 0 0 0 0 0 0 ram6 0 0 0 0 0 0 0 0 0 0 ram7 0 0 0 0 0 0 0 0 0 0 ram8 0 0 0 0 0 0 0 0 0 0 ram9 0 0 0 0 0 0 0 0 0 0 ram10 0 0 0 0 0 0 0 0 0 0 ram11 0 0 0 0 0 0 0 0 0 0 ram12 0 0 0 0 0 0 0 0 0 0 ram13 0 0 0 0 0 0 0 0 0 0 ram14 0 0 0 0 0 0 0 0 0 0 ram15 0 0 0 0 0 0 0 0 0 0 sda 33381 6455 615407 63224 2068111 1495416 28508288 15990289 0 10491 hdc 0 0 0 0 0 0 0 0 0 0 fd0 0 0 0 0 0 0 0 0 0 0 md0 0 0 0 0 0 0 0 0 0 0 [root@localhost ~]#
說明:
這些信息主要來自于/proc/diskstats.
merged:表示一次來自于合并的寫/讀請求,一般系統會把多個連接/鄰近的讀/寫請求合并到一起來操作.
實例6:查看/dev/sda1磁盤的讀/寫
命令:
輸出:
[root@SCF1129 ~]# df文件系統 1K-塊 已用 可用 已用% 掛載點 /dev/sda3 1119336548 27642068 1034835500 3% /tmpfs 32978376 0 32978376 0% /dev/shm /dev/sda1 1032088 59604 920056 7% /boot [root@SCF1129 ~]# vmstat -p /dev/sda1sda1 reads read sectors writes requested writes 18607 4249978 6 48[root@SCF1129 ~]# vmstat -p /dev/sda3sda3 reads read sectors writes requested writes 429350 35176268 28998789 980301488[root@SCF1129 ~]#
說明:
這些信息主要來自于/proc/diskstats。
reads:來自于這個分區的讀的次數。
read sectors:來自于這個分區的讀扇區的次數。
writes:來自于這個分區的寫的次數。
requested writes:來自于這個分區的寫請求次數。
實例7:查看系統的 slab 信息
命令:
vmstat -m
輸出:
[root@localhost ~]# vmstat -mCache Num Total Size Pages ip_conntrack_expect 0 0 136 28 ip_conntrack 3 13 304 13 ip_fib_alias 11 59 64 59 ip_fib_hash 11 59 64 59 AF_VMCI 0 0 960 4 bio_map_info 100 105 1064 7 dm_mpath 0 0 1064 7 jbd_4k 0 0 4096 1 dm_uevent 0 0 2608 3 dm_tio 0 0 24 144 dm_io 0 0 48 77 scsi_cmd_cache 10 10 384 10 sgpool-128 32 32 4096 1 sgpool-64 32 32 2048 2 sgpool-32 32 32 1024 4 sgpool-16 32 32 512 8 sgpool-8 45 45 256 15 scsi_io_context 0 0 112 34 ext3_inode_cache 51080 51105 760 5 ext3_xattr 36 88 88 44 journal_handle 18 144 24 144 journal_head 56 80 96 40 revoke_table 4 202 16 202 revoke_record 0 0 32 112 uhci_urb_priv 0 0 56 67 UNIX 13 33 704 11 flow_cache 0 0 128 30 msi_cache 33 59 64 59 cfq_ioc_pool 14 90 128 30 cfq_pool 12 90 216 18 crq_pool 16 96 80 48 deadline_drq 0 0 80 48 as_arq 0 0 96 40 mqueue_inode_cache 1 4 896 4 isofs_inode_cache 0 0 608 6 hugetlbfs_inode_cache 1 7 576 7 Cache Num Total Size Pages ext2_inode_cache 0 0 720 5 ext2_xattr 0 0 88 44 dnotify_cache 0 0 40 92 dquot 0 0 256 15 eventpoll_pwq 3 53 72 53 eventpoll_epi 3 20 192 20 inotify_event_cache 0 0 40 92 inotify_watch_cache 1 53 72 53 kioctx 0 0 320 12 kiocb 0 0 256 15 fasync_cache 0 0 24 144 shmem_inode_cache 254 290 768 5 posix_timers_cache 0 0 128 30 uid_cache 0 0 128 30 ip_mrt_cache 0 0 128 30 tcp_bind_bucket 3 112 32 112 inet_peer_cache 0 0 128 30 secpath_cache 0 0 64 59 xfrm_dst_cache 0 0 384 10 ip_dst_cache 5 10 384 10 arp_cache 1 15 256 15 RAW 3 5 768 5 UDP 5 10 768 5 tw_sock_TCP 0 0 192 20 request_sock_TCP 0 0 128 30 TCP 4 5 1600 5 blkdev_ioc 14 118 64 59 blkdev_queue 20 30 1576 5 blkdev_requests 13 42 272 14 biovec-256 7 7 4096 1 biovec-128 7 8 2048 2 biovec-64 7 8 1024 4 biovec-16 7 15 256 15 biovec-4 7 59 64 59 biovec-1 23 202 16 202 bio 270 270 128 30 utrace_engine_cache 0 0 64 59 Cache Num Total Size Pages utrace_cache 0 0 64 59 sock_inode_cache 33 48 640 6 skbuff_fclone_cache 7 7 512 7 skbuff_head_cache 319 390 256 15 file_lock_cache 1 22 176 22 Acpi-Operand 4136 4248 64 59 Acpi-ParseExt 0 0 64 59 Acpi-Parse 0 0 40 92 Acpi-State 0 0 80 48 Acpi-Namespace 2871 2912 32 112 delayacct_cache 81 295 64 59 taskstats_cache 4 53 72 53 proc_inode_cache 1427 1440 592 6 sigqueue 0 0 160 24 radix_tree_node 13166 13188 536 7 bdev_cache 23 24 832 4 sysfs_dir_cache 5370 5412 88 44 mnt_cache 26 30 256 15 inode_cache 2009 2009 560 7 dentry_cache 60952 61020 216 18 filp 479 1305 256 15 names_cache 3 3 4096 1 avc_node 14 53 72 53 selinux_inode_security 994 1200 80 48 key_jar 2 20 192 20 idr_layer_cache 74 77 528 7 buffer_head 164045 164800 96 40 mm_struct 51 56 896 4 vm_area_struct 1142 1958 176 22 fs_cache 35 177 64 59 files_cache 36 55 768 5 signal_cache 72 162 832 9 sighand_cache 68 84 2112 3 task_struct 76 80 1888 2 anon_vma 458 864 24 144 pid 83 295 64 59 shared_policy_node 0 0 48 77 Cache Num Total Size Pages numa_policy 37 144 24 144 size-131072(DMA) 0 0 131072 1 size-131072 0 0 131072 1 size-65536(DMA) 0 0 65536 1 size-65536 1 1 65536 1 size-32768(DMA) 0 0 32768 1 size-32768 2 2 32768 1 size-16384(DMA) 0 0 16384 1 size-16384 5 5 16384 1 size-8192(DMA) 0 0 8192 1 size-8192 7 7 8192 1 size-4096(DMA) 0 0 4096 1 size-4096 110 111 4096 1 size-2048(DMA) 0 0 2048 2 size-2048 602 602 2048 2 size-1024(DMA) 0 0 1024 4 size-1024 344 352 1024 4 size-512(DMA) 0 0 512 8 size-512 433 480 512 8 size-256(DMA) 0 0 256 15 size-256 1139 1155 256 15 size-128(DMA) 0 0 128 30 size-64(DMA) 0 0 64 59 size-64 5639 5782 64 59 size-32(DMA) 0 0 32 112 size-128 801 930 128 30 size-32 3005 3024 32 112 kmem_cache 137 137 2688 1
這組信息來自于/proc/slabinfo。
slab:由于內核會有許多小對象,這些對象構造銷毀十分頻繁,比如i-node,dentry,這些對象如果每次構建的時候就向內存要一個頁(4kb),而其實只有幾個字節,這樣就會非常浪費,為了解決這個問題,就引入了一種新的機制來處理在同一個頁框中如何分配小存儲區,而slab可以對小對象進行分配,這樣就不用為每一個對象分配頁框,從而節省了空間,內核對一些小對象創建析構很頻繁,slab對這些小對象進行緩沖,可以重復利用,減少內存分配次數。
看完上述內容,你們掌握Linux中性能監控和優化命令分別是哪些呢的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。