不看 GUI,只信命令行。關閉圖形界面 (runlevel 3),騰出每一分 CPU/內存給業務,用這 16 個核心命令建立你的「服務器透視眼」。本文按 **資源維度** 分類,附帶高頻參數組合與實戰場景,直接可用於生產巡檢、故障排查、性能基線建立。
# 核心指標:%util (設備利用率), await (平均等待), svctm (服務時間), %iowait (CPU 等待 IO) iostat -xz 1 10 # 每秒刷新 10 次,顯示擴展統計,單位 KB iostat -xmt 1 # 顯示 MB/s,時間戳 iostat -d /dev/sda 2 # 只看指定磁盤,每 2 秒
判讀:%util > 80% 或 await > 20ms (SSD) / > 100ms (HDD) → IO 瓶頸。
# free: 快速概覽 (單位可選 -h 人類可讀, -m MB, -g GB) free -h # 輸出關鍵行:Mem (總/已用/可用), Swap (總/已用/剩) # 重點看 "可用" (available) = free + buffers/cache 可回收部分 # /proc/meminfo: 內核級詳細信息 (排查緩存、Slab、PageTables、HugePages) grep -E 'MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree|Dirty|Writeback|AnonPages|Mapped|Slab|PageTables' /proc/meminfo
# 所有核心總體 + 各核心細分 mpstat -P ALL 1 5 # 關鍵欄位:%usr (用戶), %sys (系統), %iowait (IO等待), %irq/%soft (中斷), %steal (虛擬化偷跑), %idle # 單核 %idle 長期 < 10% 或 %iowait > 20% → CPU/IO 瓶頸 # %steal > 5% → 宿主機超售嚴重 (VPS 常見)
# netstat 經典 (舊) netstat -antp | grep :80 # 看 80 端口連接 netstat -s # 協議統計 (TCP 重傳、丟包、連接建立/斷開計數) netstat -rn # 路由表 netstat -i # 接口統計 # ss (iproute2, 更快、更強、替代 netstat) ss -antp | grep :80 # 同 netstat -antp ss -s # 連接狀態摘要 (estab, closed, orphaned, tw, alloc...) ss -o state established '( dport = :80 or sport = :80 )' # 狀態過濾神器
| 工具 | 特點 | 啟動鍵/參數 |
|---|---|---|
| nmon | Nigel's Monitor,IBM 開源,字符界面儀表板,支持錄製 (-f) 後導入 Excel 分析 | nmon → c=CPU, m=內存, d=磁盤, n=網絡, k=內核, t=Top進程, .=僅忙碌 |
| htop | top 增強版,彩色、樹狀、鼠標操作、可橫向滾動參數 | htop → F2 設置列, F3 搜索, F4 過濾, F5 樹狀, F6 排序 |
| glances | Python 寫的全能監控,Web 界面 (-w)、導出 InfluxDB/Prometheus、Docker 監控 | glances 或 glances -w 瀏覽器訪問 :61208 |
| dstat | vmstat/iostat/ifstat/mpstat 合體,輸出適合腳本解析/重定向 CSV | dstat -cdngy -t --output /tmp/dstat.log 10 |
# 找佔用 CPU/內存最高的進程 ps aux --sort=-%cpu | head ps aux --sort=-%mem | head # pidstat: 進程級 CPU/內存/IO/線程 統計 (sysstat 套件) pidstat -u 1 5 # CPU pidstat -r 1 5 # 內存 (RSS, VSZ, %MEM) pidstat -d 1 5 # IO (kB_rd/s, kB_wr/s, kB_ccwr/s) pidstat -t 1 5 # 線程級 # lsof: 進程打開文件/端口/連接 lsof -p PID lsof -i :80 lsof -u www
uptime # 輸出: load average: 0.52, 0.58, 0.59 (1分, 5分, 15分) # 經驗值: 負載 > 核心數 * 0.7 持續 15分 → 需關注 cat /proc/loadavg # 額外信息: 運行隊列進程數/總進程數, 最近創建的 PID
df -hT # 掛載點、類型、使用率 (關鍵: /, /var, /home, /data) df -i # inode 使用率 (大量小文件場景必看) du -h --max-depth=1 /var # 目錄級佔用排查 find /var -xdev -type f | wc -l # 文件總數估算 inode 壓力
lscpu # CPU 架構、核心、緩存、NUMA lsmem # 內存範圍、塊狀 lsblk -o +MODEL,SERIAL # 磁盤型號、序列號 (識別 SSD/HDD、RAID 卡) lspci | grep -i ethernet # 網卡型號 dmidecode -t memory # 內存條詳情 (需 root)
sysctl -a # 所有參數 sysctl -p # 載入 /etc/sysctl.conf sysctl -w net.ipv4.tcp_tw_reuse=1 # 臨時修改
journalctl -u nginx -f --since "1 hour ago" # systemd 日誌跟蹤 tail -f /var/log/nginx/access.log | awk '$9 ~ /50[0-9]/' # 實時抓 5xx grep -c "Out of memory" /var/log/messages # OOM 統計
iptables -nvL --line-numbers # 規則統計 conntrack -L | wc -l # 當前連接追蹤表條數 (防爆表) conntrack -D -p tcp --dport 80 # 刪除特定連接 (釋放資源)
crontab -l # 查看當前用戶 crontab -e # 編輯 systemctl list-timers --all # systemd 定時器 (現代替代)
who # 當前登錄用戶 last -n 20 # 最近 20 次成功登錄 lastb -n 20 # 最近 20 次失敗嘗試 (暴力破解排查)
chronyc sources -v # chrony 狀態 (CentOS 7+ 默認) timedatectl status # 系統時間狀態 ntpdate -q pool.ntp.org # 測試 NTP 源 (不設置)
# /usr/local/bin/daily_health_check.sh
#!/bin/bash
OUT="/var/log/health_$(date +%F).log"
{
echo "=== $(hostname) Daily Health $(date) ==="
uptime
free -h
df -hT
df -i
mpstat 1 1
iostat -xz 1 2
ss -s
systemctl list-units --failed
journalctl -p 3 -xb --since "24 hours ago" | tail -30
} > $OUT 2>&1
# crontab: 0 6 * * * /usr/local/bin/daily_health_check.sh
這 16 類命令覆蓋 **存儲、內存、CPU、網絡、進程、負載、磁盤、硬件、內核、日誌、防火牆、定時、用戶、時間、綜合儀表板、自動化巡檢** 全維度。建議:
iostat, free, mpstat, ss, pidstat — 解決 80% 性能問題~/.bashrc,如 alias ioi='iostat -xz 1 10'記住:**GUI 是給看客看的,命令行才是運維的手術刀**。關閉圖形界面,練就這 16 條命令,你就擁有了看透服務器內心的 X 光眼。