一、系統性能調優
系統性能調優是 Linux 管理中的關鍵技能,它能顯著提升系統在不同應用場景下的表現。通過針對性的調優,可以解決資源瓶頸問題,提高服務響應速度,優化資源利用率。
(一)CPU 性能調優
知識點詳解
1. CPU 信息查看與分析
lscpu
命令:提供 CPU 架構、核心數、線程數、緩存大小等詳細信息- 示例:
lscpu | grep -E 'Model name|Socket|Core|Thread'
- 示例:
top
命令:實時顯示 CPU 使用率、進程狀態和資源占用情況- 關鍵指標:%us(用戶空間)、%sy(系統空間)、%id(空閑)
htop
命令:增強版的 top,提供彩色顯示和鼠標支持- 可以直觀查看 CPU 每個核心的負載情況
2. 進程調度優化
- CFS 調度器:完全公平調度器,保證所有進程按權重公平獲取 CPU 時間
- 優先級調整:
nice
命令:啟動新進程時設置優先級(范圍 -20 到 19)- 示例:
nice -n 15 ./long_running_script.sh
- 示例:
renice
命令:調整已運行進程的優先級- 示例:
renice -n 10 -p 1234
- 示例:
- CPU 親和性設置:
taskset
命令:將進程綁定到特定 CPU 核心- 示例:
taskset -c 0,1 ./cpu_intensive_app
3. 高級調優工具
perf
工具:性能分析工具,可檢測 CPU 熱點tuned
服務:提供預定義的性能優化配置集
注意事項與最佳實踐
優先級設置需謹慎
- 避免將非關鍵進程設為最高優先級(-20)
- 關鍵系統進程默認已設置為高優先級,一般無需修改
多核優化策略
- 對于多線程應用,確保線程數不超過物理核心數
- 使用 CPU 親和性減少緩存失效
監控與基準測試
- 使用
sar -u 1 3
監控 CPU 使用率變化 - 調優前后進行基準測試對比效果
- 使用
(二)內存性能調優
知識點詳解
1. 內存監控工具
free -h
:人性化顯示內存總量、使用量和空閑量- 重點關注 available 列,反映實際可用內存
vmstat 1
:實時監控內存活動- 關鍵指標:si(每秒從swap讀入內存量)、so(每秒寫入swap量)
/proc/meminfo
:詳細內存統計信息文件
2. 內存管理機制
- 虛擬內存系統組成:
- 物理內存
- 交換分區(swap)
- 頁面緩存(page cache)
- 緩沖區(buffer cache)
- 交換空間管理:
- 查看:
swapon --show
- 創建:
fallocate -l 2G /swapfile && mkswap /swapfile && swapon /swapfile
- 查看:
- OOM Killer:內存耗盡時選擇性終止進程的機制
- 調整策略:
/proc/<pid>/oom_score_adj
- 調整策略:
3. 優化技術
- 大頁(HugePages):減少 TLB 失效,提升性能
- 配置:
/proc/sys/vm/nr_hugepages
- 配置:
- 透明大頁(THP):自動管理的大頁
- 控制:
/sys/kernel/mm/transparent_hugepage/enabled
- 控制:
- 內存壓縮(zswap):在內存中壓縮頁面,減少交換I/O
注意事項與最佳實踐
交換空間配置原則
- 物理內存 < 4GB:交換空間 = 2×物理內存
- 物理內存 4-8GB:交換空間 = 物理內存
- 物理內存 > 8GB:交換空間 = 0.5×物理內存(最小4GB)
交換使用監控
- 關注
vmstat
中的 si/so 值,持續不為0表示內存不足 - 設置
vm.swappiness
(默認60)控制交換傾向:- 數據庫服務器建議設為10-20
- 桌面環境可保持默認
- 關注
內存泄漏檢測
- 使用
smem -s swap
查看進程內存使用 valgrind
工具檢測應用程序內存泄漏
- 使用
(三)磁盤性能調優
知識點詳解
1. 磁盤監控與分析
df -hT
:顯示文件系統類型和使用情況- 示例:
df -hT | grep -v tmpfs
- 示例:
du -sh *
:統計目錄空間使用- 進階用法:
du -h --max-depth=1 /var
- 進階用法:
iotop
:類似top的磁盤I/O監控工具iostat -x 1
:詳細磁盤I/O統計
2. I/O調度算法
- 可用算法:
- CFQ:公平隊列,適合通用負載
- Deadline:保證請求截止時間,適合數據庫
- NOOP:簡單FIFO,適合SSD和虛擬化環境
- Kyber:新型算法,適合多隊列設備
- 查看與修改:
- 查看:
cat /sys/block/sdX/queue/scheduler
- 修改:
echo deadline > /sys/block/sda/queue/scheduler
- 查看:
3. 文件系統優化
- 掛載選項優化:
noatime
/relatime
:減少元數據更新data=writeback
:ext4更快的寫入性能(有風險)discard
:SSD TRIM支持
- 日志模式選擇:
journal
:完全日志(最安全)writeback
:僅元數據日志(性能更好)
注意事項與最佳實踐
不同存儲介質優化
- 機械硬盤:
- 定期碎片整理:
e4defrag
- 使用CFQ或Deadline調度
- 定期碎片整理:
- SSD:
- 啟用TRIM:
fstrim -v /
- 使用NOOP或Kyber調度
- 避免頻繁寫入,延長壽命
- 啟用TRIM:
- 機械硬盤:
RAID配置優化
- RAID級別選擇:
- RAID0:高性能,無冗余
- RAID1:高可用,容量減半
- RAID5/6:平衡性能與冗余
- 條帶大小調整:根據工作負載選擇合適大小
- RAID級別選擇:
LVM優化
- 合理設置PE(Physical Extent)大小
- 使用
--stripes
選項提高并行I/O - 定期檢查
vgdisplay
和lvdisplay
數據庫專用優化
- 使用裸設備或XFS文件系統
- 設置合適的I/O調度器和預讀參數
- 考慮使用
O_DIRECT
繞過頁面緩存
(四)綜合調優策略
系統級優化
內核參數調整
/etc/sysctl.conf
關鍵參數:vm.swappiness = 10 vm.dirty_ratio = 20 vm.dirty_background_ratio = 10 net.ipv4.tcp_fin_timeout = 30
服務管理優化
- 使用
systemd-analyze blame
分析啟動耗時 - 禁用不必要的系統服務
- 使用
應用級優化
Web服務器調優
- Nginx:調整 worker_processes 和 worker_connections
- Apache:優化 MaxClients 和 KeepAlive
數據庫調優
- MySQL:調整 innodb_buffer_pool_size
- PostgreSQL:優化 shared_buffers 和 work_mem
監控與維護
長期監控
- 部署 Prometheus + Grafana
- 設置合理的告警閾值
定期維護
- 日志輪轉:
logrotate
- 系統更新:安全補丁和性能改進
- 日志輪轉:
通過全面系統的調優,可以顯著提升 Linux 系統的整體性能,滿足不同業務場景的需求。調優時應遵循"測量-調整-驗證"的循環,確保每次修改都帶來實際的性能提升。
二、高級文件系統管理
Linux 的文件系統功能強大,掌握高級文件系統管理技巧能更好地管理和維護文件系統。這些技巧不僅適用于服務器管理員,也對開發人員和高級用戶有很大幫助。
(一)LVM(邏輯卷管理)
知識點
LVM 的基本概念: LVM(Logical Volume Manager)是一種靈活的磁盤管理方案,由三個主要組件構成:
- 物理卷(PV):實際的物理磁盤或分區,通過
pvcreate
命令初始化 - 卷組(VG):由多個物理卷組成的一個邏輯存儲池,使用
vgcreate
創建 - 邏輯卷(LV):從卷組中劃分出來的邏輯存儲區域,通過
lvcreate
創建,可以像普通分區一樣進行格式化和掛載
LVM 的常用命令:
- 物理卷操作:
pvcreate
,pvdisplay
,pvmove
,pvremove
- 卷組操作:
vgcreate
,vgextend
,vgreduce
,vgdisplay
- 邏輯卷操作:
lvcreate
,lvextend
,lvreduce
,lvdisplay
- 文件系統調整:
resize2fs
(ext文件系統)或xfs_growfs
(xfs文件系統)
示例操作流程:
- 初始化物理卷:
pvcreate /dev/sdb1 /dev/sdc1
- 創建卷組:
vgcreate myvg /dev/sdb1 /dev/sdc1
- 創建邏輯卷:
lvcreate -L 20G -n mylv myvg
- 格式化并掛載:
mkfs.ext4 /dev/myvg/mylv
,然后mount /dev/myvg/mylv /mnt
注意事項
規劃建議:
- 預留10-20%的卷組空間用于未來擴展
- 為不同用途的數據創建獨立的邏輯卷
- 考慮使用條帶化(striping)來提高I/O性能
擴展邏輯卷的正確步驟:
- 先擴展邏輯卷:
lvextend -L +5G /dev/myvg/mylv
- 再調整文件系統:
resize2fs /dev/myvg/mylv
- 對于XFS文件系統:
xfs_growfs /mnt
- 先擴展邏輯卷:
縮減注意事項:
- ext文件系統可縮減,但需要先卸載文件系統
- XFS文件系統不支持縮減
- 縮減前務必備份重要數據
(二)文件系統快照
知識點
快照的作用: 文件系統快照可以在不中斷服務的情況下,創建一個文件系統在某個時間點的狀態副本,常用于:
- 數據備份(不影響生產系統運行)
- 軟件測試(基于快照環境)
- 系統恢復(快速回滾到之前狀態)
LVM 快照實現:
- 創建快照:
lvcreate -s -n snap_mylv -L 5G /dev/myvg/mylv
-s
表示創建快照-L
指定快照空間大小
- 掛載快照:
mount /dev/myvg/snap_mylv /mnt/snapshot
- 使用后刪除:
lvremove /dev/myvg/snap_mylv
快照原理: 快照采用寫時復制(Copy-on-Write)技術:
- 初始時快照不占用實際空間
- 當源卷數據塊被修改時,原始數據會先復制到快照空間
- 快照始終反映創建時的數據狀態
注意事項
空間規劃:
- 快照空間大小取決于源卷的預期變化量
- 對于頻繁更新的系統,建議分配源卷15-20%的空間
- 監控快照空間使用:
lvs
命令查看"Snap%"列
性能影響:
- 快照會帶來一定的I/O開銷
- 生產環境避免長期保留快照
- 關鍵業務時段慎用快照
最佳實踐:
- 為每個快照明確命名和用途
- 建立快照生命周期管理策略
- 結合備份策略使用(如將快照備份到遠程存儲)
(三)文件權限與 ACL(訪問控制列表)
知識點
傳統文件權限: Linux使用9位權限標志(rwxrwxrwx):
- 前3位:所有者權限
- 中3位:所屬組權限
- 后3位:其他用戶權限
- 數值表示:r=4, w=2, x=1
常用命令:
- 修改權限:
- 符號模式:
chmod u=rwx,g=rx,o= file
- 數值模式:
chmod 750 file
- 符號模式:
- 修改所有者:
chown user:group file
- 特殊權限:
- SUID(4):
chmod u+s file
- SGID(2):
chmod g+s dir
- Sticky(1):
chmod o+t /tmp
- SUID(4):
ACL(訪問控制列表): 提供更精細的權限控制,允許為:
- 特定用戶設置權限
- 特定組設置權限
- 默認權限(對新創建文件生效)
ACL操作命令:
- 設置ACL:
setfacl -m u:user:rwx file
(為用戶設置)setfacl -m g:group:rx file
(為組設置)setfacl -d -m u:user:rw dir
(默認ACL)
- 查看ACL:
getfacl file
- 刪除ACL條目:
setfacl -x u:user file
注意事項
權限管理原則:
- 遵循最小權限原則
- 定期審計權限設置
- 使用組而非個人用戶進行權限分配
ACL實施要點:
- 確保文件系統掛載時啟用ACL選項(mount -o acl)
- ext*文件系統需要在格式化時啟用ACL功能
- ACL不影響傳統權限顯示(ls -l顯示+號表示有ACL)
特殊場景處理:
- 共享目錄:SGID+ACL組合
- 臨時目錄:Sticky位防止用戶刪除他人文件
- 可執行文件:SUID謹慎使用(安全風險)
權限問題排查:
- 檢查有效權限:考慮用戶主組和附加組
- 查看SELinux上下文:
ls -Z
- 檢查父目錄權限(影響文件訪問)
三、網絡配置與安全
一、高級網絡配置
知識點詳解
網絡接口配置
基本配置方法:
- 使用
ifconfig
命令進行臨時配置(重啟后失效) - 通過
/etc/sysconfig/network-scripts/ifcfg-eth0
(CentOS/RHEL)或/etc/network/interfaces
(Debian/Ubuntu)進行永久配置 - 可配置參數包括:
- IPADDR:IP地址
- NETMASK:子網掩碼
- GATEWAY:默認網關
- DNS1/DNS2:DNS服務器
- BOOTPROTO:獲取IP方式(static/dhcp/none)
- 使用
nmcli 工具(NetworkManager命令行工具):
nmcli con add con-name "my-connection" ifname eth0 type ethernet ip4 192.168.1.100/24 gw4 192.168.1.1
路由配置
基本命令:
route -n
:查看路由表ip route show
:更詳細的顯示方式route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.1
:添加路由ip route add 10.0.0.0/8 via 192.168.1.1
:等效命令
永久路由配置:
- CentOS/RHEL:在
/etc/sysconfig/network-scripts/route-eth0
中添加 - Ubuntu/Debian:在
/etc/network/interfaces
中添加up route add -net...
- CentOS/RHEL:在
網絡Bonding技術
工作模式:
- mode=0(balance-rr):輪詢模式,提高帶寬
- mode=1(active-backup):主備模式,提高可靠性
- mode=4(802.3ad):LACP聚合,需要交換機支持
配置示例:
# 創建bond接口 nmcli con add type bond con-name bond0 ifname bond0 mode active-backup # 添加從屬接口 nmcli con add type bond-slave ifname eth0 master bond0 nmcli con add type bond-slave ifname eth1 master bond0
注意事項與最佳實踐
配置生效:
- CentOS 7+:
systemctl restart NetworkManager
- Ubuntu 18.04+:
netplan apply
(使用netplan的情況) - 傳統方法:
service network restart
或/etc/init.d/networking restart
- CentOS 7+:
路由配置驗證:
- 使用
traceroute
或mtr
命令驗證路由路徑 - 通過
ping
測試目標網絡可達性
- 使用
Bonding模式選擇建議:
- 服務器多網卡:推薦mode=4(需交換機支持LACP)
- 關鍵業務網絡:推薦mode=1(主備模式)
- 測試環境:可使用mode=0(輪詢模式)
二、防火墻與安全策略
防火墻技術詳解
iptables
表與鏈結構:
- filter表(默認):INPUT、OUTPUT、FORWARD鏈
- nat表:PREROUTING、POSTROUTING鏈
- mangle表:用于特殊數據包修改
規則示例:
# 允許SSH訪問 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允許已建立的連接 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 默認拒絕所有其他入站流量 iptables -P INPUT DROP
規則保存:
- CentOS:
service iptables save
- Ubuntu:
apt-get install iptables-persistent
,然后netfilter-persistent save
- CentOS:
firewalld
核心概念:
- zone(區域):定義信任級別(如public、internal、dmz)
- service(服務):預定義的端口/協議組合(如http、ssh)
- rich rule(富規則):高級過濾規則
常用命令:
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload firewall-cmd --list-all
高級功能:
- 端口轉發:
firewall-cmd --add-forward-port
- 源地址限制:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
- 端口轉發:
SELinux深入
工作模式:
- Enforcing:強制執行安全策略
- Permissive:記錄違規但不阻止
- Disabled:完全禁用
常用命令:
getenforce # 查看當前狀態 setenforce 1|0 # 臨時切換模式 semanage port -l # 查看端口標簽 restorecon -Rv /path # 恢復文件上下文
策略管理:
audit2allow
:從審計日志生成自定義策略模塊sealert
:分析SELinux拒絕事件
安全最佳實踐
防火墻配置原則:
- 默認拒絕所有入站流量(
firewall-cmd --set-default-zone=drop
) - 按需開放端口(推薦使用服務定義而非直接開放端口)
- 定期審計規則(
firewall-cmd --list-all-zones
)
- 默認拒絕所有入站流量(
SELinux管理建議:
- 生產環境不應禁用SELinux
- 遇到權限問題時,首先檢查
/var/log/audit/audit.log
- 使用
chcon
和semanage
調整文件上下文而非完全禁用保護
綜合安全措施:
- 結合fail2ban防止暴力破解
- 使用TCP Wrappers(/etc/hosts.allow, /etc/hosts.deny)進行額外訪問控制
- 定期更新安全補丁(
yum update
/apt-get upgrade
)
監控與審計:
- 使用
ss -tulnp
監控開放端口 - 通過
journalctl -u firewalld
查看防火墻日志 - 定期檢查
/var/log/secure
獲取安全相關事件
- 使用
四、Shell 腳本編程進階
Shell 腳本編程是自動化管理 Linux 系統的重要手段,掌握進階的 Shell 腳本編程技巧能顯著提高工作效率。下面介紹幾個關鍵的高級技巧和注意事項。
一、函數與參數傳遞
知識點詳解
函數定義方式:
- 使用
function
關鍵字:function myfunc() { ... }
- 簡化形式:
myfunc() { ... }
參數傳遞機制:
- 位置參數:
$1
(第一個參數)、$2
(第二個參數)等 - 特殊變量:
$#
:參數個數$*
和$@
:所有參數$0
:腳本名稱$?
:函數返回值
示例:
function greet() {echo "Hello, $1! There are $# parameters in total."
}
greet "Alice" "Bob" "Charlie"
最佳實踐
命名規范:
- 使用小寫字母和下劃線組合
- 選擇有描述性的名稱,如
calculate_disk_usage()
- 避免與系統命令重名
參數檢查:
function safe_divide() {if [ $# -ne 2 ]; thenecho "Usage: safe_divide dividend divisor"return 1fi# 函數邏輯...
}
- 返回值處理:
- 使用
return
返回狀態碼(0-255) - 通過命令替換
$(function)
獲取輸出
- 使用
二、流程控制進階
高級條件判斷
case 語句示例:
read -p "Enter your choice (start|stop|restart): " choice
case "$choice" instart)systemctl start nginx;;stop)systemctl stop nginx;;restart)systemctl restart nginx;;*)echo "Invalid choice"exit 1;;
esac
測試表達式增強:
- 字符串比較:
=
,!=
,-z
(空),-n
(非空) - 數值比較:
-eq
,-ne
,-gt
,-lt
,-ge
,-le
- 文件測試:
-e
(存在),-f
(常規文件),-d
(目錄)
循環結構優化
for 循環變體:
# 遍歷數字范圍
for i in {1..10}; doecho "Count: $i"
done# C風格for循環
for ((i=0; i<10; i++)); doecho "Index: $i"
done
while 讀取文件:
while IFS= read -r line; doecho "Processing: $line"
done < input.txt
循環控制技巧:
break N
:跳出N層循環continue N
:跳過N層循環的當前迭代- 使用
:
創建無限循環:while :; do ... done
三、文本處理工具進階
grep 高級用法
常用選項組合:
# 遞歸搜索目錄,忽略大小寫,顯示行號
grep -rin "error" /var/log/# 只顯示匹配的文件名
grep -rl "pattern" /path/# 使用擴展正則表達式,匹配多個模式
grep -E "error|warning|critical" logfile
上下文查看:
-A NUM
:顯示匹配行后的NUM行-B NUM
:顯示匹配行前的NUM行-C NUM
:顯示匹配行前后各NUM行
sed 實戰技巧
基本替換:
# 替換每行第一個匹配
sed 's/old/new/' file# 全局替換
sed 's/old/new/g' file# 原地修改(BSD/macOS需要-i '',GNU需要-i)
sed -i.bak 's/old/new/g' file
高級編輯:
# 刪除空行
sed '/^$/d' file# 在匹配行后插入
sed '/pattern/a new line' file# 只處理第5-10行
sed '5,10s/old/new/g' file
awk 編程能力
基本結構:
awk 'BEGIN {初始化} 模式 {動作} END {結束處理}' file
字段處理:
# 打印特定列
awk '{print $1, $3}' data.txt# 使用自定義分隔符
awk -F: '{print $1, $6}' /etc/passwd# 條件過濾
awk '$3 > 100 {print $1, $2}' data.txt
統計計算:
# 計算文件行數
awk 'END {print NR}' file# 列求和
awk '{sum+=$1} END {print sum}' data.txt# 分組統計
awk '{count[$1]++} END {for (i in count) print i, count[i]}' logfile
注意事項與調試技巧
調試方法:
- 使用
set -x
開啟調試模式 - 在關鍵位置添加
echo
打印變量值 - 使用
bash -n script.sh
檢查語法
- 使用
性能優化:
- 減少子shell創建
$(command)
- 使用
[[ ]]
代替[ ]
進行測試 - 批量處理文本時,盡量減少管道使用
- 減少子shell創建
可移植性:
- 在腳本開頭指定解釋器:
#!/bin/bash
- 避免使用bash特有的特性(如需要兼容其他shell)
- 使用
command -v
檢查命令是否存在
- 在腳本開頭指定解釋器:
安全考慮:
- 始終引用變量:
"$var"
- 使用
read -r
防止反斜杠轉義 - 驗證用戶輸入,避免命令注入
- 始終引用變量:
五、服務管理與監控
對 Linux 系統中的服務進行有效的管理和監控,能確保系統的穩定運行。以下是詳細的管理和監控方法:
(一)系統服務管理
知識點詳解
systemd 服務管理
systemd
是目前大多數現代 Linux 發行版(如 RHEL 7+/CentOS 7+、Ubuntu 16.04+、Debian 8+等)采用的系統和服務管理器。它提供了強大的服務管理功能:
基本命令:
systemctl start 服務名
:啟動指定服務(如systemctl start nginx
)systemctl stop 服務名
:停止指定服務systemctl restart 服務名
:重啟服務systemctl reload 服務名
:重新加載配置而不中斷服務systemctl enable 服務名
:設置服務開機自啟systemctl disable 服務名
:取消服務開機自啟systemctl status 服務名
:查看服務狀態
高級功能:
systemctl mask 服務名
:完全禁用服務(防止手動或自動啟動)systemctl unmask 服務名
:解除服務禁用systemctl list-dependencies 服務名
:查看服務依賴關系
服務配置文件
服務的配置文件通常位于以下目錄:
/etc/systemd/system/
:系統管理員自定義的服務配置/usr/lib/systemd/system/
:軟件包安裝的服務配置
配置文件示例(以 Nginx 為例):
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s quit[Install]
WantedBy=multi-user.target
注意事項
服務名稱準確性:
- 使用
systemctl list-unit-files --type=service
查看所有服務 - 使用
systemctl list-units --type=service --all
查看所有加載的服務單元
- 使用
配置文件修改:
- 修改配置文件后必須執行
systemctl daemon-reload
重新加載配置 - 建議先測試配置:
systemd-analyze verify 服務名.service
- 修改配置文件后必須執行
其他注意事項:
- 謹慎使用
systemctl restart
,可能會中斷正在處理的請求 - 對于關鍵服務,考慮使用
systemctl try-restart
只在服務運行時才重啟 - 檢查服務日志:
journalctl -u 服務名 -f
(實時查看)
- 謹慎使用
(二)系統監控工具
知識點詳解
實時監控工具
top/htop:
top
:經典的系統監控工具,顯示進程、CPU、內存等信息- 常用快捷鍵:
M
(按內存排序)、P
(按CPU排序)、1
(顯示所有CPU核心)
- 常用快捷鍵:
htop
:增強版,支持彩色顯示、鼠標操作、樹狀視圖等- 安裝:
yum install htop
(RHEL/CentOS)或apt install htop
(Debian/Ubuntu) - 功能:可以直觀地查看進程樹、直接殺死進程、調整優先級等
- 安裝:
vmstat:
- 報告系統整體性能指標
- 示例:
vmstat 1 5
(每1秒采樣,共5次) - 輸出字段說明:
r
:運行隊列中的進程數b
:等待I/O的進程數swpd
:使用的虛擬內存量free
:空閑內存量si/so
:每秒從磁盤交換到內存/從內存交換到磁盤的數量
iostat:
- 監控磁盤I/O性能
- 示例:
iostat -dx 1
(顯示擴展統計,每1秒刷新) - 重要指標:
%util
:設備利用率(接近100%表示I/O瓶頸)await
:平均I/O響應時間svctm
:平均服務時間
netstat/ss:
netstat
:傳統網絡統計工具netstat -tulnp
:查看監聽端口和對應進程netstat -s
:顯示網絡統計摘要
ss
:更高效的替代工具ss -tulnp
:功能同netstat但性能更好ss -s
:顯示更詳細的套接字統計
高級監控系統
Nagios:
- 成熟的企業級監控解決方案
- 特點:
- 主動檢查(定期輪詢)
- 強大的告警功能(郵件、短信等)
- 豐富的插件生態系統
- 典型監控項:服務狀態、磁盤空間、CPU負載、網絡連通性等
Zabbix:
- 現代化的監控系統
- 優勢:
- 支持主動和被動監控
- 自動發現功能
- 強大的可視化(圖形、地圖、儀表盤)
- 靈活的告警配置
- 監控范圍:服務器、網絡設備、應用程序、數據庫等
Prometheus+Grafana:
- Prometheus:專注于時間序列數據的監控系統
- Grafana:強大的可視化工具
- 組合優勢:
- 高效的指標收集和存儲
- 美觀靈活的儀表盤
- 適合云原生環境監控
注意事項
資源占用:
- 實時工具(如top/htop)會消耗系統資源,在高負載系統上謹慎使用
- 考慮使用
nice
和ionice
降低監控工具的優先級
監控配置:
- 對于Nagios/Zabbix:
- 合理設置檢查間隔(太頻繁會增加負載,太稀疏可能錯過問題)
- 配置有意義的告警閾值(基于基線而非固定值)
- 設置適當的告警升級策略
- 對于Nagios/Zabbix:
數據保留:
- 規劃監控數據的保留周期
- 對于長期趨勢分析,考慮數據歸檔策略
安全性:
- 確保監控系統本身的安全(訪問控制、加密傳輸等)
- 敏感數據(如密碼)在配置文件中要妥善處理
性能基準:
- 建立系統性能基準,便于識別異常
- 定期審查監控指標和告警規則的有效性