linux-系統性能監控
- 一、cpu
- 1.1 查看cpu的信息
- 1.2 cpu性能指標
- 1.3 編寫監控cpu使用率的腳本
- 1.4 查找出使用cpu最高的10個進程
- 二、內存
- 2.1 查看內存信息
- 2.2 交換(swap)分區
- 2.2.1 查看交換分區的積極程度
- 2.2.2 查看交換分區的大小
- 2.2.3 管理交換分區
- 2.3 編寫獲取內存使用率的腳本
- 2.4 查找出使用內存最高的10個進程
- 三、磁盤
- 3.1 查看磁盤信息
- 3.2 測試磁盤性能
- 四、網絡流量
- 五、進程
- 5.1 查看進程
- 5.2 殺死進程
- 5.3 讓進程在后臺運行
- 全能命令
- 總結
一、cpu
中央處理器 central processing unit --》cpu
1.1 查看cpu的信息
top
--> 輸入1 (默認按cpu使用率排序 -> P)htop
lscpu
cat /proc/cpuinfo
dmidecode
-t 4
dmidecode 是 Linux 系統下用于讀取 DMI(Desktop Management Interface,桌面管理接口) 信息的工具,可以獲取 BIOS、主板、CPU、內存、系統序列號等硬件信息。它直接從 SMBIOS(System Management BIOS) 讀取數據,適用于服務器、PC 等 x86/x86_64 架構的設備
查看服務器型號:dmidecode | grep ‘Product Name’
查看主板的序列號:dmidecode |grep ‘Serial Number’
查看系統序列號:dmidecode -s system-serial-number
查看內存信息:dmidecode -t memory
查看OEM信息:dmidecode -t 11
1.2 cpu性能指標
核心數量
主頻率
納秒
秒–》毫秒–》微妙–》納秒緩存
(Cache)—》加速
CPU 緩存(L1/L2/L3)用于臨時存儲高頻數據,減少訪問內存的延遲:
Level 1
Level 2
Level 3
top - 15:00:30 up 5:39, 2 users, load average: 0.30, 0.29, 0.27
Tasks: 185 total, 1 running, 184 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.3 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.2 hi, 0.2 si, 0.0 st
MiB Mem : 7553.1 total, 6521.6 free, 507.4 used, 776.3 buff/cache
MiB Swap: 7940.0 total, 7940.0 free, 0.0 used. 7045.7 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31350 root 20 0 0 0 0 I 1.0 0.0 0:01.23 kworker/3:1-events 571 root 20 0 0 0 0 S 0.3 0.0 0:12.67 xfsaild/dm-0 31423 root 20 0 0 0 0 I 0.3 0.0 0:00.24 kworker/u512:1-events_unbound 31997 root 20 0 10816 4096 3328 R 0.3 0.1 0:00.34 top 1 root 20 0 170536 12928 9856 S 0.0 0.2 0:22.26 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.07 kthreadd
系統平均負載
是在過去的1分鐘,5分鐘,15分鐘內,處于可運行或不可中斷狀態的進程的平均數量。
1 cup 核心 --》1
4 cpu 核心 --》4
%Cpu0 : 0.3 us, 0.7 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.3 hi, 0.3 si, 0.0 st
文檔解釋
us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
id, idle : time spent in the kernel idle handler
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
st : time stolen from this vm by the hypervisor
us
user 進程消耗的cpu資源 --》普通的應用程序消耗的資源
sy
system 進程消耗的cpu資源 —》內核進程
- 網絡IO 磁盤IO 大量產生進程—》內核
內核的作用:
1.對cpu進行管理(上下文切換、進程的調度到cpu)
2.對磁盤進行管理–》文件的存取—》磁盤IO
3.對進程進行管理(創建、銷毀、殺死等)
4.對內存進行分配管理
5.對其他硬件進行管理(網卡、GPU等)
id
—》空閑的cpu資源 idle
ni
nice 友好的
進程是有優先級,默認情況下所有的進程優先級一樣
cfs --》完全公平調度算法 --》rr +timeslice + priority +中斷
PR = 20 + nice值
nice值
作用:調整進程的靜態優先級,范圍從 -20(最高優先級)到 19(最低優先級)。
默認值:新進程繼承父進程的nice值(通常為 0)。
進程的默認優先級是20
PR 列:動態優先級(數值越小優先級越高)
renice 調整進程的nice值
如:調整進程為797 nice值
[root@rocky-2 shell]#
renice -n -10 797
1.3 編寫監控cpu使用率的腳本
monitor_cpu.sh
當cpu使用率超過70%給與提醒,記錄到日志文件/var/log/monitor_cpu.log里,記錄日期 機器名 + 當前的使用率
截取cpu使用率
top -bn1|grep "Cpu"|awk -F '[ ,]+' '{print $8}'
top
命令
-b 批處理模式,適合腳本里使用,一次性輸出所有的進程的信息和cpu、內存的信息
-n 1 迭代1次
-d 2 每次延遲2秒更新數據
awk
是截取命令
-F 指定分隔符號 ,默認是空白–》包含空格和tab
正則表達式
: 將字符串,數字,特殊符號按照某個正確規則組合在一起,用來表達某個意思的公式
[ ,]+ 表示空格和逗號都是分隔符 + 表示前面的字符可以出現1或者n次 -> 多個空格或者多個,都是只能是一個分隔符
print 是awk里的輸出命令
$8 代表第8個字段
[root@rocky-2 shell]# cat monitor_cpu.sh
#!/bin/bash#cpu空閑率
cpu_idle_num=$(top -bn 1|grep "^%Cpu"|awk -F '[ ,]+' '{print $8}')#100 - 空閑率=使用率
cpu_used_num=$( echo "100 - $cpu_idle_num"|bc)#判斷cpu的使用率是否超過70%
flag=$(echo "$cpu_used_num >= 70"|bc)
if (( $flag == 1 ));thenecho "$(date +%Y%m%d%H%M%S) $(hostname) cpu使用率是 ${cpu_used_num}%" |tee -a /var/log/monitor_cpu.log
elseecho "$(date +%Y%m%d%H%M%S) $(hostname) cpu使用率是 ${cpu_used_num}%"
fi
1.4 查找出使用cpu最高的10個進程
ps -aux --sort -%cpu|head
ps -A -o pid,%cpu,command --sort -%cpu|head
-A 顯示所有的進程
-o 指定輸出字段 output option 選項字段
–sort 根據那列進行排序,默認是升序 + 升序 - 降序
二、內存
2.1 查看內存信息
-
cat /proc/meminfo
—>內存的使用信息–》整體信息 -
free
--》/proc/meminfo 獲得,計算出來的
proc文件系統 --》/proc文件夾 --》對/proc文件進行管理的一套系統
/proc
文件夾消耗的空間是內存的空間,存放的是內核進程工作的信息和數據
/proc 是 Linux 系統中一個特殊的虛擬文件系統,它不占用磁盤空間,而是由內核動態生成,用于內核與用戶空間交互
tmpfs
臨時文件系統,消耗的是內存的空間,給應用程序臨時存放數據 temporary file system
[root@rocky-2 proc]# df -a
文件系統 1K-塊 已用 可用 已用% 掛載點
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devtmpfs 4096 0 4096 0% /dev
securityfs 0 0 0 - /sys/kernel/security
tmpfs 3867204 0 3867204 0% /dev/shm
free命令詳解
total
Total installed memory (MemTotal and SwapTotal in /proc/meminfo)
?
used
Used memory (calculated as total - free - buffers - cache)
?
free
Unused memory (MemFree and SwapFree in /proc/meminfo)
?
shared
Memory used (mostly) by tmpfs (Shmem in /proc/meminfo)
?
buffers
Memory used by kernel buffers (Buffers in /proc/meminfo)
?
cache
Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
?
buff/cache
Sum of buffers and cache
?
available
Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided by the cache or free
fields, this field takes into account page cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use
(MemAvailable in /proc/meminfo, available on kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as free)
buffer
是緩存數據的空間 (data memory --》disk )內存當中的數據寫入到磁盤的時候,臨時存放數據的地方
data --》memory write to disk
cache
是緩存數據的空間 (data disk --》memory ) 應用程序需要從磁盤讀取數據到內存里,臨時存放數據的地方
data
--》disk read to memory
buffer和cache
可以理解為內核消耗的內存空間 --》可以提供給應用程序使用
used
是應用程序消耗的內存空間
available
可以使用的空間,當我們創建一個新的進程的時候,可以給這個進程分配的最大的內存空間
available = free + 可回收的buffer/cache
total = used + free + buffers + cache
建議只是看free剩余的內存空間
如何清除buffer和cache里的內容?
echo 3 >/proc/sys/vm/drop_caches
2.2 交換(swap)分區
物理內存+swap分區的大小 = 虛擬內存
8G + 8G = 16G
swap
分區 :磁盤空間,將物理內存里的不活躍的進程交換到swap分區,當需要調用的時候再從交換分區里交換到物理內存里
臨時存放數據的作用
如果交換分區開始使用,說明物理內存不足
OOM
(Out Of Memory) --》 內存溢出
sync
命令可以把linux緩存(buffer)寫進磁盤
2.2.1 查看交換分區的積極程度
[root@rocky-2 ~]#
cat /proc/sys/vm/swappiness
60
# 當物理內存使用率超過40%的時候,就開始使用swap分區
臨時修改
root@sanchuang:~#
echo 0 > /proc/sys/vm/swappiness
root@sanchuang:~# cat /proc/sys/vm/swappiness
0
# 0 表示當物理內存剩余0的時候開始使用,使用率100%的時候,開始使用交換分區
對內核參數的調優,優化了什么時候開始使用交換分區的空間
永久修改
[root@rocky-2 proc]#
vim /etc/sysctl.conf
vm.swappiness = 0
讓內核重新讀取配置文件,加載新的參數
[root@rocky-2 proc]#
sysctl -p
vm.swappiness = 0
2.2.2 查看交換分區的大小
[root@rocky-2 ~]#
cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 8130556 0 -2
因為交換分區使用的是磁盤的空間,速度不及內存的速度,性能較差,在某些應用場景不推薦使用
2.2.3 管理交換分區
禁用交換分區
[root@rocky-2 ~]#
swapoff -a
選項:
-a, --all 禁用 /proc/swaps 中的所有交換區
[root@rocky-2 ~]# cat /proc/swaps
Filename Type Size Used Priority
[root@rocky-2 ~]#
[root@rocky-2 ~]# top
top - 11:29:37 up 2:10, 2 users, load average: 0.15, 0.17, 0.19
Tasks: 188 total, 1 running, 187 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.4 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.1 hi, 0.2 si, 0.0 st
MiB Mem : 7553.1 total, 6810.4 free, 498.1 used, 487.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 7055.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 11720 root 20 0 0 0 0 I 1.0 0.0 0:03.73 kworker/3:3-events 17 root 20 0 0 0 0 I 0.3 0.0 0:03.26 rcu_preempt 800 root 10 -10 168836 8960 7680 S 0.3 0.1 0:15.22 vmtoolsd
RES
- anything occupying physical memory 物理內存的使用空間
share 共享內存使用的大小
共享內存是實現進程和進程之間通信的一種方式
S
– Process Status
- The status of the task which can be one of:
- D = uninterruptible sleep
- I = idle
- R = running
- S = sleeping
- T = stopped by job control signal
- t = stopped by debugger during trace
- Z = zombie
打開交換分區
[root@rocky-2 ~]#
swapon -a
[root@rocky-2 ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 8130556 0 -2
2.3 編寫獲取內存使用率的腳本
monitor_mem.sh
使用的內存空間百分比=100-(free/total)*100
[root@rocky-2 ~]# free -m
total used free shared buff/cache available
Mem: 7553 512 6410 17 881 7040
Swap: 7939 0 7939
[root@rocky-2 shell]# vim monitor_mem.sh
#!/bin/bash#獲取total值
total_num=$(free -m|grep "^Mem"|awk '{print $2}')
#獲取free值
free_num=$(free -m|grep "^Mem"|awk '{print $4}')#使用內存的百分比
used_percent=$(echo "scale=2;100 - $free_num * 100 / $total_num"|bc)
echo "總的內存是 ${total_num}MB 目前系統已經使用了 ${used_percent}%"#判斷使用率是否超過70%
flag=$(echo "$used_percent >= 70"|bc)if (( $flag == 1 ));thenecho "$(date +%Y%m%d%H%M%S) $(hostname) 內存使用率超過70% 目前的值是 $used_percent" |tee -a /var/log/mem.log
elseecho "$(date +%Y%m%d%H%M%S) $(hostname) 內存使用率沒有超過70% 目前的值是 $used_percent"
fi
[root@rocky-2 shell]# bash monitor_mem.sh
總的內存是 7553MB 目前系統已經使用了 7.13%
20250708171540 rocky-2 內存使用率沒有超過70% 目前的值是 7.13
使用awk進行內存使用率的計算
[root@rocky-2 shell]#
free -m|awk 'NR==2{printf "%.2f%%\n",$3/$2*100}'
6.65%
2.4 查找出使用內存最高的10個進程
ps -aux --sort -%mem|head
ps -A -o pid,%mem,command --sort -%mem|head
三、磁盤
3.1 查看磁盤信息
df -Th
查看磁盤里已經掛載的分區的使用的情況
iostat
查看磁盤讀寫的速度
iostat -x 2 5
-x 顯示擴展統計信息
2表示間隔時間
5表示迭代顯示5次
%util :繁忙度
sar -d
監控磁盤 I/O 性能
fdisk -l
查看磁盤分區
3.2 測試磁盤性能
dd
是一個數據備份的命令
dd if=/dev/zero of=sc.dd bs=1M count=1000
if input file 輸入文件
/dev/zero 會產生零 0
of output file 輸出文件
bs=1M 數據單元
count=1000 數量
四、網絡流量
dstat
實時監控
glances
以交互式儀表盤的形式實時展示系統的 CPU、內存、磁盤、網絡、進程等全方位性能指標
nethogs
查看某個進程消耗了多少流量
五、進程
5.1 查看進程
ps aux
top
/htop
pstree
sar
lsof -i
:22
lsof -p
25889
查看進程內存映射關系
[root@rocky-2 ~]#
pmap
25889
25889: nginx: master process nginx
000055b7b1bce000 140K r---- nginx
000055b7b1bf1000 816K r-x-- nginx
000055b7b1cbd000 228K r---- nginx
000055b7b1cf6000 8K r---- nginx
000055b7b1cf8000 96K rw— nginx
000055b7b1d10000 124K rw— [ anon ]
000055b7b3810000 376K rw— [ anon ]
00007fb473a00000 160K r---- libc.so.6
00007fb473a28000 1492K r-x-- libc.so.6
00007fb473b9d000 352K r---- libc.so.6
00007fb473bf5000 16K r---- libc.so.6
5.2 殺死進程
kill
-15 默認的信號
15) SIGTERM 讓進程自我終結
-9 告訴內核去強制殺死某個進程
9) SIGKILL
1)?SIGHUP 父進程退出,會給子進程發HUP信號,內核去殺死所有 的收到hup信號的進程
屏蔽hup信號 nohup
nohup bash while.sh &
[1] 125508
根據名字殺死所有進程
pkill
-9 vim
killall
-9 vim
根據終端號來殺死進程
pkill -9 -t pts/0
5.3 讓進程在后臺運行
vim feng.txt &
在命令后使用 &
讓程序在后臺運行
查看當前終端有多少個進程在后臺執行
[root@rocky-2 shell]#
jobs
[1]+ 已停止 vim feng.txt
將后臺運行的第1個進程調入前臺運行
[root@rocky-2 shell]# fg 1
# foreground
vim feng.txt
全能命令
sar -u -r -d 1 5 -n DEV
sar:系統活動報告工具,用于收集和展示系統性能數據
- -u:監控 CPU 使用率
- -r:監控 內存和交換分區 使用情況
- -d:監控 磁盤 I/O 性能(
- 1 5:每 1 秒輸出一次統計數據,共輸出 5 次(
- -n DEV:監控 網絡接口流量
glances
跨平臺的高級系統監控工具,它以交互式儀表盤的形式實時展示系統的 CPU、內存、磁盤、網絡、進程等全方位性能指標,相比 top、htop 等工具更直觀、功能更全面,支持本地和遠程監控
dstat
是一款功能強大的系統性能監控工具,它整合了 vmstat、iostat、netstat 等傳統工具的功能,支持實時監控 CPU、內存、磁盤 I/O、網絡等多項系統指標,且輸出格式更直觀、靈活
總結
監控的核心價值是 “通過數據驅動,實現對被監控對象的可控性”—— 從實時狀態感知到故障快速解決,從風險提前預警到資源優化配置,最終保障業務穩定運行、降低損失、提升效率,是現代 IT 系統和業務運營中不可或缺的一環