Linux系統環境主要監測CPU、記憶體、磁碟I/O和網路流量。
可以通過uptime檢視系統整體的負載情況。
如果伺服器的CPU為1核心,則1分鐘的系統平均負載 >=3 說明負載過高,如果伺服器的CPU為4核心,則load average中的數位 >=12 負載過高。
root@ubuntu1804:~# uptime
09:57:53 up 7:17, 2 users, load average: 0.10, 0.03, 0.01
09:57:53 # 當前時間
up 7:17 # 主機已執行時間
2 users # 當前登入使用者數
load average: 0.10, 0.03, 0.01 # 系統負載,即任務佇列的平均長度。 三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值
ehigh@ubuntu:~$ grep -c 'processor' /proc/cpuinfo
8
CPU:central processing unit,中央處理器。
插槽:表示電腦上插了幾個物理cpu
核心:表示這個物理cpu有幾個核心,一個核心就是一個cpu
邏輯處理器:邏輯上的處理器數量,通過超執行緒技術將一個處理器模擬出兩個處理器出來。
超執行緒技術:在一顆CPU同時執行多個程式而共同分享一顆CPU內的資源,理論上要像兩顆CPU一樣在同一時間執行兩個執行緒
cpu發展歷程:
剛開始一個物理cpu只有一個核心,通過提高核心的工作頻率來提高效能,但是會產生過多的熱量。
後面因特爾發明了超執行緒技術,在一顆CPU同時執行多個程式而共同分享一顆CPU內的資源,理論上要像兩顆CPU一樣在同一時間執行兩個執行緒
後面採用多核架構,在一個物理cpu裡面放多個核心,好似一輛汽車放多個發動機。
例如:伺服器上面插了一個物理cpu是4核8執行緒。表示的是這個cpu又4個核心,支援超執行緒技術,邏輯cpu就是8個。
並行
使用top命令,按下大寫的P,可以按cpu使用率排序
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
720 root 20 0 473464 22060 19128 S 1.7 0.2 119:55.14 sunloginclient
3590 emqx 20 0 3483576 201492 74484 S 1.3 2.0 64:39.37 beam.smp
984 root 20 0 2754328 50696 5192 S 1.0 0.5 77:32.96 taosd
程序的cpu佔用能否超過100%?
如果你的4核心的cpu,你可以執行400%
判斷CPU當前忙不忙?
要結合cpu使用率和佇列一起看,如果一分鐘內cpu的佇列數超過3並且cpu的使用率也很高,說明當前cpu很忙。
使用top命令,然後按數位1就可以顯示每個cpu的詳細資訊
top - 10:48:44 up 5 days, 1:15, 1 user, load average: 0.10, 0.14, 0.10
Tasks: 398 total, 1 running, 397 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 3.4 sy, 0.0 ni, 96.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 9952.6 total, 5473.8 free, 2145.3 used, 2333.5 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 7477.7 avail Mem
# 96.6 id -- 表示cpu的空閒率是96.6%
root@ubuntu:~# free -h
total used free shared buff/cache available
Mem: 9.7Gi 2.1Gi 5.4Gi 49Mi 2.3Gi 7.3Gi
Swap: 0B 0B 0B
#選項:
# -h 表示系統會根據值的大小來選擇合適的單位,預設是byte
# aotal 總計物理(swap)記憶體的大小
# used 已使用實體記憶體(swap)的大小
# free 可用的實體記憶體(swap)大小
# shared 多個程序共用的記憶體總額
# buff/cache 磁碟的快取大小
# available 可以被新應用程式使用的記憶體大小
# Mem:實體記憶體的大小
# Swap:交換分割區的大小,交換分割區就是使用磁碟的一部分空間來模擬記憶體,當實體記憶體佔用滿的時候就將一部分不常用的資料移動到交換分割區中。交換分割區是臨時充當記憶體的作用,效能很低。
使用top命令然後按大寫M就可以按照記憶體的使用率來進行排序,按e可以按M,G,T 這些單位來顯示
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1377 mysql 20 0 4.8g 0.8g 0.0g S 0.7 7.8 67:01.24 mysqld
977 root 20 0 7.7g 0.3g 0.0g S 0.0 3.4 32:34.83 java
3590 emqx 20 0 3.3g 0.2g 0.1g S 0.7 2.0 64:48.04 beam.smp
446 root 19 -1 0.3g 0.2g 0.2g S 0.0 2.0 1:59.99 systemd-journ
oot@ubuntu1804:~# iostat -dkp
Linux 4.15.0-156-generic (ubuntu1804) 12/03/2022 _x86_64_ (4 CPU)
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 8 0
sda 0.64 16.17 58.90 487458 1775844
sda1 0.01 0.20 0.00 5893 96
sda2 0.00 0.00 0.00 4 0
sda5 0.00 0.11 0.00 3312 0
sda6 0.63 15.79 58.90 476129 1775748
scd0 0.00 0.07 0.00 2056 0
# kB_read/s 每秒從磁碟讀入的資料量,單位為K.
# kB_wrtn/s 每秒向磁碟寫入的資料量,單位為K.
# kB_read 讀入的資料總量,單位為K.
# kB_wrtn 寫入的資料總量,單位為K.
# -d 僅顯示磁碟統計資訊
# -k 以K為單位顯示每秒的磁碟請求數,預設單位塊.
# -p device | ALL 用於顯示塊裝置及系統分割區的統計資訊.
伺服器很卡,檢視CPU使用率不高,記憶體也夠用,但就是卡,尤其是開啟新程式或檔案時,更卡。此時是哪出問題了?
一般是磁碟IO到達了瓶頸,還企業級ssd可以提高效能瓶頸。
root@ubuntu1804:~# iotop -o
Total DISK READ : 5.79 M/s | Total DISK WRITE : 2.28 M/s
Actual DISK READ: 5.79 M/s | Actual DISK WRITE: 4.64 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
17238 be/4 tom 5.79 M/s 0.00 B/s 0.00 % 64.19 % find /
17092 be/4 root 0.00 B/s 0.00 B/s 0.00 % 12.71 % [kworker/u256:0]
476 be/3 root 0.00 B/s 2.28 M/s 0.00 % 5.45 % [jbd2/sda6-8]
# Total DISK READ:總的磁碟讀取速度。 Total DISK WRITE:總的磁碟寫入速度。
# Actual DISK READ:實際磁碟讀的速度 Actual DISK WRITE:實際磁碟寫的速度
# TID:程序pid值。
# PRIO:優先順序。
# USER:使用者。
# DISKREAD:磁碟讀取速度。
# DISK WRITE:磁碟寫入速度。
# SWAPIN:從swap分割區讀取資料佔用的百分比。
# IO:I/O佔用的百分比。
# COMMAND:消耗I/O的程序名。
#命令選項:
# -o, -only 只顯示在讀寫硬碟的程式
# -d SEC, -delay=SEC 設定顯示時間間隔。 重新整理時間
# 退出,按q或ctrl+C
tom@ubuntu1804:~$ nload -u h # -u:指定資料的單位 h表示寫哦那個會根據數值的大小自動選擇單位 例如M G等
Device eth0 [10.0.0.18] (1/2):
==
Incoming:#進來的網路流量
Curr: 558.33 kBit/s #當前流量
Avg: 297.12 kBit/s #平均流量
Min: 1.39 kBit/s #最小流量
Max: 894.77 kBit/s #最大流量
Ttl: 58.23 MByte #流量總和
Outgoing:#出去的網路流浪
Curr: 16.16 kBit/s
Avg: 15.37 kBit/s
Min: 4.52 kBit/s
Max: 32.62 kBit/s
Ttl: 766.79 kByte
tom@ubuntu1804:~$ sudo nethogs
NetHogs version 0.8.5-2
PID USER PROGRAM DEV SENT RECEIVED
1733 root wget eth0 13.352 4317.425 KB/sec
1605 tom sshd: tom@pts/0 eth0 1.025 0.07013.276 KB/sec
1732 root wget tom@pts/0 eth0 0.000 0.000 KB/sec
? root unknown TCP 0.000 0.000 KB/sec
TOTAL 0.000 0.000 KB/sec 14.378 4317.701
# PID:行程 ID。
# USER:行程的擁有者。
# PROGRAM:程式路徑。
# DEV:網路介面。
# SENT:目前傳送資料的速度。
# RECEIVED:目前接收資料的速度
#TOTAL 總計、總和
#快捷鍵:
# m:切換頻寬單位,可用單位有 KB/s、KB、B、MB。
# r:以資料接收速度排序。
# s:以資料傳送速度排序。
# q:離開 NetHogs。