文章目錄
- 一、系統調優概述與 CPU 負載查看
- 1.使用 uptime 查看系統負載
- 2.使用 top 按 CPU 使用率排序
- 3.使用 ps 查看 CPU 使用最多的進程
- 4.使用 mpstat 查看 CPU 詳細狀態
- 一、查看內存運行狀態
- 1.使用 free 查看內存使用
- 2.查看 /proc/meminfo 獲取詳細內存信息
- 3.使用 top 按內存使用排序
- 4.使用 ps 查看內存使用最多的進程
- 三、查看磁盤 I/O 狀態
- 1.查看文件系統塊大小
- EXT4:
- XFS:
- 2.使用 iostat 查看磁盤 I/O
- 3.使用 dd 測試磁盤寫入
- 4.使用 iotop 查看實時 I/O 進程
- 四、查看網絡狀態
- 1.使用 nload 查看實時帶寬
- 2.使用 nethogs 查看進程網絡使用
- 五、查看系統整體狀態
- 1.使用 vmstat 查看系統整體狀態
- 2.使用 sar 記錄系統狀態
- 3.查看 sar 歷史日志
一、系統調優概述與 CPU 負載查看
1.使用 uptime 查看系統負載
uptime
[root@centos7 /]# uptime19:40:21 up 9:25, 2 users, load average: 0.00, 0.01, 0.05
解讀:
- 輸出格式: 時間 運行時間 登錄用戶數 平均負載(1分鐘、5分鐘、15分鐘)
若1分鐘負載值 > CPU核心數,說明系統可能過載。 - 舉個列子:若系統CPU核心數為1,此時1分鐘負載值(1.25)> 1,說明系統可能短暫過載(需結合5分鐘/15分鐘負載趨勢綜合判斷)
2.使用 top 按 CPU 使用率排序
步驟:
- 運行 top ;
- 按大寫 P 按 CPU 使用率降序排列。
3.使用 ps 查看 CPU 使用最多的進程
ps -aux --sort -pcpu | head -10
ps -aux:列出系統中所有進程的詳細信息
a:顯示所有用戶的進程
u:以用戶為中心的格式顯示(包含 CPU、內存等使用信息)
x:包括沒有控制終端的進程
--sort -pcpu:按照 CPU 使用率(pcpu)進行排序,負號表示降序排列
| head -10:通過管道將結果傳遞給 head 命令,只顯示前 10 行
4.使用 mpstat 查看 CPU 詳細狀態
mpstat -P ALL 1 5
mpstat:是系統性能監控工具 sysstat 包中的命令,用于報告 CPU 的統計信息
-P ALL:顯示所有 CPU 核心(包括單個核心和整體平均)的統計數據
1:采樣間隔時間,單位為秒(這里表示每 1 秒采集一次數據)
5:采樣次數(這里表示總共采集 5 次)
[root@centos7 /]# mpstat -P ALL 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (centos7.2) 2025年08月27日 _x86_64_ (4 CPU)20時23分18秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20時23分19秒 all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.75
20時23分19秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20時23分19秒 1 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
20時23分19秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20時23分19秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0020時23分19秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20時23分20秒 all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.75
20時23分20秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20時23分20秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20時23分20秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20時23分20秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
。。。
%usr :用戶空間CPU占比;
%sys :內核空間CPU占比;
%iowait :等待I/O占比;
%idle :空閑占比。
一、查看內存運行狀態
1.使用 free 查看內存使用
free -m
[root@centos7 /]# free -mtotal used free shared buff/cache available
Mem: 3770 497 2201 14 1071 3015
Swap: 4095 0 4095
available 列表示實際可用內存(包括可回收的緩存)。
2.查看 /proc/meminfo 獲取詳細內存信息
[root@centos7 /]# cat /proc/meminfo
MemTotal: 3861076 kB
MemFree: 2254660 kB
MemAvailable: 3087532 kB
Buffers: 16 kB
Cached: 1007196 kB
SwapCached: 0 kB
Active: 1030832 kB
Inactive: 221516 kB
Active(anon): 160876 kB
Inactive(anon): 99056 kB
Active(file): 869956 kB
Inactive(file): 122460 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4194300 kB
SwapFree: 4194300 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 245160 kB
Mapped: 98912 kB
Shmem: 14796 kB
Slab: 157944 kB
SReclaimable: 90092 kB
SUnreclaim: 67852 kB
KernelStack: 7440 kB
PageTables: 19872 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 6124836 kB
Committed_AS: 2228920 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 183528 kB
VmallocChunk: 34359310332 kB
Percpu: 36352 kB
HardwareCorrupted: 0 kB
AnonHugePages: 65536 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 126784 kB
DirectMap2M: 4067328 kB
DirectMap1G: 2097152 kB
Active :活躍內存;
Inactive :非活躍內存(可被換出)。
3.使用 top 按內存使用排序
- 運行 top ;
- 按大寫 M 按內存使用降序排列。
4.使用 ps 查看內存使用最多的進程
ps -aux --sort -rss | head -10
三、查看磁盤 I/O 狀態
1.查看文件系統塊大小
EXT4:
tune2fs -l /dev/sda1 | grep "Block size"
用于 ext 系列文件系統(ext2/ext3/ext4)
tune2fs -l 會列出該文件系統的詳細信息
輸出類似:Block size: 4096(表示塊大小為 4096 字節)
XFS:
fs_growfs -l /dev/sda1 | grep bsize
用于 XFS 文件系統
xfs_growfs -l 會顯示 XFS 文件系統的布局信息
輸出類似:bsize=4096(表示塊大小為 4096 字節)
2.使用 iostat 查看磁盤 I/O
iostat -d -k -p /dev/sda 1 5
iostat:系統 I/O 統計工具,用于監控磁盤和 CPU 的輸入輸出性能
-d:只顯示磁盤(device)的統計信息,不顯示 CPU 信息
-k:以 KB(千字節)為單位顯示數據(默認是塊)
-p /dev/sda:顯示指定磁盤/dev/sda及其所有分區的統計信息
1 5: 采樣間隔為1秒,共采樣5次
[root@centos7 /]# iostat -d -k -p /dev/sda 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (centos7.2) 2025年08月27日 _x86_64_ (4 CPU)Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.77 89.22 501.00 3297947 18518508
sda1 0.06 14.52 0.06 536691 2048
sda2 0.11 55.83 0.00 2063652 0
sda3 1.60 18.79 500.94 694368 18516460
。。。
kB_read/s :每秒讀取數據量;
kB_wrtn/s :每秒寫入數據量。
3.使用 dd 測試磁盤寫入
dd if=/dev/zero of=testfile bs=1M count=1000; sync
dd if=/dev/zero of=testfile:使用dd命令從/dev/zero(一個源源不斷輸出 0 字節的特殊設備)讀
取數據,寫入到名為testfile的文件中
bs=1M:設置每次讀寫的塊大小為 1MB
count=1000:設置讀寫的塊數量為 1000,所以總文件大小是 1MB×1000=1000MB(約 1GB)
; sync:分號分隔兩個命令,sync用于將內存中的數據強制刷新到磁盤,確保文件真正寫入硬盤
4.使用 iotop 查看實時 I/O 進程
iotop -o -d 1
iotop:一個專門監控磁盤 I/O 的工具(需要 root 權限運行),可以顯示每個進程的 I/O 使用情況
-o:只顯示正在產生 I/O 活動的進程(過濾掉沒有 I/O 操作的進程,更簡潔)
-d 1:設置刷新間隔為 1 秒(每秒更新一次數據)
四、查看網絡狀態
1.使用 nload 查看實時帶寬
yum install epel-release
yum install nload
nload
實時網絡流量狀態 (Incoming/Outgoing)
指標 值 說明
當前速率 (Curr) 41.12 kBit/s 瞬時接收速率
平均速率 (Avg) 166.04 kBit/s 本次會話的平均接收速率
最小速率 (Min) 3.49 kBit/s 本次會話的最小接收速率
最大速率 (Max) 1.33 MBit/s 本次會話的最大接收速率 (峰值)
總數據量 (Ttl) 81.77 MByte 本次會話累計接收的總數據量
操作:
在另一終端使用ab壓測
ab -n 1000 -c 2 http://www.baidu.com/
#安裝包 httpd-tools
ab:Apache 自帶的 HTTP 壓力測試工具,用于模擬多個用戶并發訪問網站并統計性能數據
-n 1000:指定總請求數為 1000 次(總共向百度首頁發送 1000 個請求)
-c 2:指定并發數為 2(每次同時發送 2 個請求,模擬 2 個用戶同時訪問)
http://www.baidu.com/:目標測試的 URL(這里是百度首頁)
Requests per second: 50.00 [#/sec] (mean) # 平均每秒處理請求數(吞吐量)
Time per request: 40.000 [ms] (mean) # 平均每個請求的響應時間
Time per request: 20.000 [ms] (mean, across all concurrent requests) # 并
發情況下每個請求的實際等待時間
Percentage of the requests served within a certain time (ms):
50% 30
90% 50
99% 80 # 99%的請求在80ms內完成
就是輸入壓測后在另一終端使用nload進行監測
2.使用 nethogs 查看進程網絡使用
nethogs
操作:
在另一終端使用 wget 下載大文件,觀察 nethogs 輸出。
五、查看系統整體狀態
1.使用 vmstat 查看系統整體狀態
vmstat 1 5 虛擬內存統計(Virtual Memory Statistics)工具,能全面反映系統運行狀態
1:采樣間隔時間,單位為秒(每 1 秒刷新一次數據)
5:采樣次數(總共輸出 5 組數據)[root@centos7 /]# vmstat 1 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 0 0 2254656 16 1097308 0 0 22 123 16 18 0 0 100 0 0r:等待運行的進程數(如果長期大于 CPU 核心數,說明 CPU 不夠用)
b:處于不可中斷睡眠的進程數(通常是等待 I/O,數值高說明 I/O 繁忙)
si/so:每秒從 swap 分區讀入 / 寫入內存的數據量(非 0 說明內存不足,開始用交換分區)
bi/bo:每秒從塊設備讀入 / 寫入的數據量(反映磁盤 I/O 活動)
wa:CPU 等待 I/O 的時間百分比(超過 20% 說明 I/O 成為瓶頸)
us/sy:用戶態 / 內核態占用 CPU 的百分比(us 高說明應用消耗 CPU 多,sy 高可能是系統調用頻繁)
id:CPU 空閑百分比(過低說明 CPU 負載高)
r :運行隊列長度;
b :阻塞進程數;
si/so :換入/換出內存;
bi/bo :塊讀/寫。
2.使用 sar 記錄系統狀態
sar -u 2 5 -o cpu.sar # 記錄CPU
-u:查看 CPU 使用率統計
2 5:每 2 秒采樣一次,共采樣 5 次
-o cpu.sar:將結果保存到文件cpu.sar(方便后續用sar -f cpu.sar查看)
輸出中重點關注:
%user:用戶程序占用 CPU 的比例
%sys:系統內核占用 CPU 的比例
%idle:CPU 空閑比例(過低說明 CPU 負載高)
sar -r 1 5 # 記錄內存
-r:查看內存和交換空間使用情況
1 5:每 1 秒采樣一次,共采樣 5 次
輸出中重點關注:
memused:已使用內存百分比
freemem:空閑內存大小
swapused:交換空間使用百分比(非 0 可能表示內存緊張)
sar -n DEV 1 5 # 記錄網絡
-r:查看內存和交換空間使用情況
1 5:每 1 秒采樣一次,共采樣 5 次
輸出中重點關注:
memused:已使用內存百分比
freemem:空閑內存大小
swapused:交換空間使用百分比(非 0 可能表示內存緊張)
3. sar -n DEV 1 5(監控網絡)
-n DEV:查看網絡接口(如 eth0、ens33)的流量統計
1 5:每 1 秒采樣一次,共采樣 5 次
輸出中重點關注:
rxpck/s:每秒接收的數據包數
txpck/s:每秒發送的數據包數
rxkB/s:每秒接收的千字節數
txkB/s:每秒發送的千字節數(數值過高可能表示網絡帶寬飽和)
查看記錄:
sar -u -f cpu.sar
3.查看 sar 歷史日志
ls /var/log/sa
sar -n DEV -f /var/log/sa/sa15