Linux 系統環境監測

2022-12-03 15:01:14

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。