Linux系統環境監測 Linux系統環境主要監測CPU、記憶體、磁碟I/O和網路流量。 1. CPU (1) 查看CPU的負載情況:uptime 可以通過uptime查看系統整體的負載情況。 如果伺服器的CPU為1核心,則1分鐘的系統平均負載 >=3 說明負載過高,如果伺服器的CPU為4核心,則lo ...
Linux系統環境監測
Linux系統環境主要監測CPU、記憶體、磁碟I/O和網路流量。
1. CPU
(1) 查看CPU的負載情況:uptime
可以通過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分鐘前到現在的平均值
(2)linux中查看cpu的邏輯數量:
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個。
併發
(3)查看系統中使用CPU最多的進程:top
使用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很忙。
(4)查看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%
2. 記憶體
(1)查看記憶體的大小和使用量:
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:交換分區的大小,交換分區就是使用磁碟的一部分空間來模擬記憶體,當物理記憶體占用滿的時候就將一部分不常用的數據移動到交換分區中。交換分區是臨時充當記憶體的作用,性能很低。
(2)查看系統使用記憶體最多的進程:
使用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
3. 磁碟IO
(1)查看對磁碟讀寫最多的進程
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可以提高性能瓶頸。
(2)查看哪個進程使用磁碟讀寫最多
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
4. 網路
(1)使用nload監控總體帶寬使用情況
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
(2)使用nethogs找出使用帶寬最多的進程
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。