1. CPU相關介紹
1.1 物理CPU
物理cpu就是計算機上實際安裝的cpu,物理cpu數(shù)就是主板上實際插入的CPU數(shù)量。
在Linux上查看/proc/cpuinfo,其中的physical id就是每個物理cpu的id,有幾個不同的physical id就有幾個物理cpu。
# 查看物理CPU個數(shù)
grep 'physical id' /proc/cpuinfo | uniq | wc -l
1.2 物理CPU內核
每顆物理CPU可以有1個或者多個物理內核,通常每顆物理CPU的內核數(shù)都是固定的,
單核CPU就是有1個物理內核,雙核CPU就是有2個物理內核。
在Linux上查看/proc/cpuinfo,其中的core id就是每顆物理CPU的物理內核id,有幾個不同的core id就有幾個物理內核。
總的CPU物理內核數(shù) = 物理CPU數(shù) * 每顆物理CPU的內核數(shù)。
# 查看每個物理CPU核心數(shù)
grep 'core id' /proc/cpuinfo | uniq | wc -l
# 或
cat /proc/cpuinfo | grep 'cpu cores' | uniq
1.3 邏輯CPU
操作系統(tǒng)可以使用邏輯CPU來模擬真實CPU。在沒有多核處理器時,一個物理CPU只能有一個物理內核。
現(xiàn)在有了多核技術,一個物理CPU可以有多個物理內核,可以把一個CPU當做多個CPU使用,也就是所謂的邏輯CPU。
沒有開啟超線程的時,邏輯CPU的個數(shù)就是總的CPU物理內核數(shù)。
開啟超線程后,邏輯CPU的個數(shù)就是總的CPU物理內核數(shù)的兩倍。
在Linux查看/proc/cpuinfo/,其中的processor就是邏輯CPU,有幾個processor就有幾個邏輯CPU。
總的邏輯CPU數(shù) = 總的物理CPU內核數(shù) * 超線程數(shù)。
超線程(hyper-threading)其實就是同時多線程(simultaneous multi-theading),
是一項允許一個CPU執(zhí)行多個控制流的技術, 一核當兩核使用
# 查看總的邏輯CPU的個數(shù)
grep 'processor' /proc/cpuinfo | wc -l
# 查看單個物理CPU中邏輯CPU的個數(shù)
cat /proc/cpuinfo | grep 'siblings' | uniq
# 查看單個物理CPU中核數(shù)和邏輯CPU的個數(shù)
cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq
# 邏輯CPU數(shù)量和型號
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
1.4 幾核幾線程
如果計算機有一個物理CPU,且是雙核的,支持超線程,那么這臺計算機就是雙核四線程。實際上幾核幾線程中的線程數(shù)就是邏輯CPU數(shù)。
對于兩路四核超線程計算機,兩路指計算機有2個物理CPU,每顆CPU中有4個物理內核,CPU支持超線程,
就有2 * 4 * 2 = 16個邏輯CPU,這就是通常所謂的16核計算機。
1.5 CPU設計圖
2. top 查看系統(tǒng)負載、CPU使用情況
top
第一部分是前5行,是系統(tǒng)整體的統(tǒng)計信息;
第二部分是第8行開始的進程信息,我們從上往下逐行依次進行說明。
2.1 系統(tǒng)整體的統(tǒng)計信息
top - 09:50:21 up 1 day, 18:36, 1 user, load average: 0.05, 0.12, 0.13
Tasks: 180 total, 1 running, 179 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 2.4 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995676 total, 72108 free, 746344 used, 177224 buff/cache
KiB Swap: 2097148 total, 379132 free, 1718016 used. 87544 avail Mem
第一行
top - 09:50:21 up 1 day, 18:36, 1 user, load average: 0.05, 0.12, 0.13
top:當前時間
up:機器運行了多長時間
users:當前登錄用戶數(shù)
load average:系統(tǒng)負載,即任務隊列的平均長度。三個數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。
這里具體需要關注的還是load average三個數(shù)值。先來說說定義吧:在一段時間內,CPU正在處理以及等待CPU處理的進程數(shù)之和。三個數(shù)字分別代表了1分鐘,5分鐘,15分鐘的統(tǒng)計值,這個數(shù)值的確能反應服務器的負載情況。但是,這個數(shù)值高了也并不能直接代表這臺機器的性能有問題,可能是因為正在進行CPU密集型的計算,也有可能是因為I/O問題導致運行隊列堵了。所以,當我們看到這個數(shù)值飆升的時候,還得具體問題具體分析。大家都知道,一個CPU在一個時間片里面只能運行一個進程,CPU核數(shù)的多少直接影響到這臺機器在同時間能運行的進程數(shù)。所以一般來說Load Average的數(shù)值別超過這臺機器的總核數(shù),就基本沒啥問題。
第二行
Tasks: 180 total, 1 running, 179 sleeping, 0 stopped, 0 zombie
Tasks:當前有多少進程
running:正在運行的進程數(shù), 這里running越多,服務器自然壓力就越大。
sleeping:正在休眠的進程數(shù)
stopped:停止的進程數(shù)
zombie:僵尸進程數(shù)
第三行
%Cpu(s): 0.3 us, 2.4 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us:用戶空間占CPU的百分比(像shell程序、各種語言的編譯器、各種應用、web服務器和各種桌面應用都算是運行在用戶地址空間的進程,這些程序如果不是處于idle狀態(tài),那么絕大多數(shù)的CPU時間都是運行在用戶態(tài))
sy: 內核空間占CPU的百分比(所有進程要使用的系統(tǒng)資源都是由Linux內核處理的,對于操作系統(tǒng)的設計來說,消耗在內核態(tài)的時間應該是越少越好,在實踐中有一類典型的情況會使sy變大,那就是大量的IO操作,因此在調查IO相關的問題時需要著重關注它)
ni:用戶進程空間改變過優(yōu)先級(ni是nice的縮寫,可以通過nice值調整進程用戶態(tài)的優(yōu)先級,這里顯示的ni表示調整過nice值的進程消耗掉的CPU時間,如果系統(tǒng)中沒有進程被調整過nice值,那么ni就顯示為0)
id: 空閑CPU占用率
wa: 等待輸入輸出的CPU時間百分比(和CPU的處理速度相比,磁盤IO操作是非常慢的,有很多這樣的操作,比如,CPU在啟動一個磁盤讀寫操作后,需要等待磁盤讀寫操作的結果。在磁盤讀寫操作完成前,CPU只能處于空閑狀態(tài)。Linux系統(tǒng)在計算系統(tǒng)平均負載時會把CPU等待IO操作的時間也計算進去,所以在我們看到系統(tǒng)平均負載過高時,可以通過wa來判斷系統(tǒng)的性能瓶頸是不是過多的IO操作造成的)
hi: 硬中斷占用百分比(硬中斷是硬盤、網卡等硬件設備發(fā)送給CPU的中斷消息,當CPU收到中斷消息后需要進行適當?shù)奶幚?消耗CPU時間)。)
si:軟中斷占用百分比(軟中斷是由程序發(fā)出的中斷,最終也會執(zhí)行相應的處理程序,消耗CPU時間)
st:steal time
第四行
KiB Mem : 995676 total, 72108 free, 746344 used, 177224 buff/cache
total:物理內存總量
free:空閑內存量
used:使用的內存量
buffer/cache:用作內核緩存的內存量
第五行
KiB Swap: 2097148 total, 379132 free, 1718016 used. 87544 avail Mem
total:交換區(qū)內存總量
free:空閑交換區(qū)總量
used:使用的交換區(qū)總量
buffer/cache:緩沖的交換區(qū)總量
第四第五行分別是內存信息和swap信息,所有程序的運行都是在內存中進行的,所以內存的性能對與服務器來說非常重要。不過當內存的free變少的時候,其實我們并不需要太緊張。真正需要看的是Swap中的used信息。Swap分區(qū)是由硬盤提供的交換區(qū),當物理內存不夠用的時候,操作系統(tǒng)才會把暫時不用的數(shù)據放到Swap中。所以當這個數(shù)值變高的時候,說明內存是真的不夠用了。
2.2 進程信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21712 root 20 0 720752 2628 596 S 0.7 0.3 1:19.50 containerd-shim
21735 polkitd 20 0 1314948 37304 140 S 0.7 3.7 4:38.99 mysqld
21410 root 20 0 720496 2524 656 S 0.3 0.3 1:18.03 containerd-shim
21432 polkitd 20 0 1376352 14576 0 S 0.3 1.5 4:44.28 mysqld
21597 polkitd 20 0 1314948 5156 0 S 0.3 0.5 4:39.84 mysqld
42336 root 20 0 162108 2364 1572 R 0.3 0.2 0:00.77 top
1 root 20 0 194096 4680 2624 S 0.0 0.5 0:19.29 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.09 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
PID 進程id
USER 進程所有者的用戶名
PR 優(yōu)先級
NI nice值,負值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR 共享內存大小,單位kb
S 進程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程
%CPU 上次更新到現(xiàn)在的CPU時間占用百分比
%MEM 進程使用的物理內存百分比
TIME+ 進程使用的CPU時間總計,單位1/100秒
COMMAND 命令名/命令行
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列,還有一些參數(shù),例如:
PPID 父進程id
GROUP 進程所有者的組名
SWAP: 進程使用的虛擬內存中被換出的大小
CODE 可執(zhí)行代碼占用的物理內存大小,單位kb
DATA 可執(zhí)行代碼以外的部分(數(shù)據段+棧)占用的物理內存大小,單位kb
nFLT 頁面錯誤次數(shù)
nDRT 最后一次寫入到現(xiàn)在,被修改過的頁面數(shù)。
WCHAN 若該進程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名
Flags 任務標志
2.3 top命令使用
top命令常用的選項參數(shù):
選項 | 功能 |
---|---|
-d | 指定每兩次屏幕信息刷新之間的時間間隔,如希望每秒刷新一次,則使用:top -d 1 |
-p | 通過指定PID來僅僅監(jiān)控某個進程的狀態(tài) |
-S | 指定累計模式 |
-s | 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險 |
-i | 使top不顯示任何閑置或者僵死的進程 |
-c | 顯示整個命令行而不只是顯示命令名 |
top 每隔3秒顯式所有進程的資源占用情況
top -d 1 每隔1秒顯式所有進程的資源占用情況
top -c 每隔3秒顯式進程的資源占用情況,并顯示進程的命令行參數(shù)(默認只有進程名)
top -p 28820 -p 38830 每隔3秒顯示pid是28820和pid是38830的兩個進程的資源占用情況
top -d 2 -c -p 69358 每隔2秒顯示pid是69358的進程的資源使用情況,并顯式該進程啟動的命令行參數(shù)
敲top后,按鍵盤數(shù)字“1”可以監(jiān)控每個邏輯CPU的狀況
敲top后,輸入u,然后輸入用戶名,則可以查看相應的用戶進程
敲top后,top命令默認以K為單位顯示內存大小,我們可以通過大寫字母E來切換內存信息區(qū)域的顯示單位,如下按一下E切換到MB
3. lscpu 顯示有關 CPU 架構的信息
參數(shù) | 說明 |
---|---|
Architecture | #架構 |
CPU op-mode(s) | #支持的模式 |
Byte Order | #字節(jié)排序的模式,常用小端模式 |
CPU(s) | #邏輯cpu顆數(shù) |
On-line CPU(s) list | #在線的cpu數(shù)量 有故障或者過熱時,某些CPU會停止運行而掉線 |
Thread(s) per core | #每個核心線程 |
Core(s) per socket | #每個cpu插槽核數(shù)/每顆物理cpu核數(shù) |
CPU socket(s) | #cpu插槽數(shù),即:物理cpu的數(shù)量 |
NUMA node(s) | #有幾個NUMA節(jié)點 |
Vendor ID | #cpu廠商ID |
CPU family | #廠商設定的CPU家族編號 |
Model | #型號 |
Model name | #型號名稱 |
Stepping | #步進,可以理解為同一型號cpu的版本號 |
CPU MHz | #cpu主頻 |
BogoMIPS | #估算MIPS, MIPS是每秒百萬條指令 |
Hypervisor vendor | #虛擬化技術的提供商 |
Virtualization type | #cpu支持的虛擬化技術的類型 |
L1d cache | #一級高速緩存 dcache 用來存儲數(shù)據 |
L1i cache | #一級高速緩存 icache 用來存儲指令 |
L2 cache | #二級緩存 |
L3 cache | #三級緩存 |
NUMA node0 CPU(s) | 0-3 //四個cpu在同一個numa節(jié)點node0上 |
Flags | cpu支持的技術特征 |
4. free 查看內存信息
# 查看內存信息
cat /proc/meminfo
顯示系統(tǒng)使用和空閑的內存情況,包括物理內存、交互區(qū)內存(swap)和內核緩沖區(qū)內存。共享內存將被忽略。
# 查看內存信息
free -m
參數(shù)解釋
參數(shù) | 解釋 |
---|---|
taotal | 總計物理(swap)內存的大小 |
used | 已使用物理內存(swap)的大小 |
free | 可用的物理內存(swap)大小 |
shared | 多個進程共享的內存總額 |
buff/cache | 磁盤的緩存大小 |
available | 可以被新應用程序使用的內存大小 |
常用命令參數(shù)
參數(shù) | 說明 |
---|---|
-b | 以Byte為單位顯示內存使用情況 |
-k | 以KB為單位顯示內存使用情況 |
-m | 以MB為單位顯示內存使用情況 |
-g | 以GB為單位顯示內存使用情況 |
-h | 以有好的方式顯示內存的使用情況 |
-o | 不顯示緩沖區(qū)調節(jié)列 |
-s<間隔秒數(shù)> | 持續(xù)觀察內存使用狀況 |
-t | 顯示內存總和列 |
-V | 顯示版本信息 |
在進行資源監(jiān)控時,我們可以使用如下命令查看剩余內存大小
# 查看剩余內存大小
free -m |awk '/Mem/{print $4}'
5. iostat 查看io信息
iostat 主要用于輸出磁盤IO 和 CPU的統(tǒng)計信息。
iostat屬于sysstat軟件包??梢杂脃um install sysstat 直接安裝。
命令參數(shù):
參數(shù) | 說明 |
---|---|
-c | 顯示CPU使用情況 |
-d | 顯示磁盤使用情況 |
-N | 顯示磁盤陣列(LVM) 信息 |
-n | 顯示NFS 使用情況 |
-k | 以 KB 為單位顯示 |
-m | 以 M 為單位顯示 |
-t | 報告每秒向終端讀取和寫入的字符數(shù)和CPU的信息 |
-V | 顯示版本信息 |
-x | 顯示詳細信息 |
-p | [磁盤] 顯示磁盤和分區(qū)的情況 |
cpu屬性值說明:
%user:CPU處在用戶模式下的時間百分比。
%nice:CPU處在帶NICE值的用戶模式下的時間百分比。
%system:CPU處在系統(tǒng)模式下的時間百分比。
%iowait:CPU等待輸入輸出完成時間的百分比。
%steal:管理程序維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比。
%idle:CPU空閑時間百分比。
備注:如果%iowait的值過高,表示硬盤存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統(tǒng)響應慢時,有可能是CPU等待分配內存,此時應加大內存容量。%idle值如果持續(xù)低于10,那么系統(tǒng)的CPU處理能力相對較低,表明系統(tǒng)中最需要解決的資源是CPU。
device:磁盤名稱
tps:每秒鐘發(fā)送到的I/O請求數(shù).
Blk_read/s:每秒讀取的block數(shù).
Blk_wrtn/s:每秒寫入的block數(shù).
Blk_read:讀入的block總數(shù).
Blk_wrtn:寫入的block總數(shù).文章來源:http://www.zghlxwxcb.cn/news/detail-684792.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-684792.html
到了這里,關于Linux命令查看CPU、內存、IO使用情況簡單介紹的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!