歡迎來到藍(lán)隊(duì)云技術(shù)小課堂,每天分享一個(gè)技術(shù)小知識。
一、pidstat是什么?為什么運(yùn)維工程師必須掌握它?
pidstat是sysstat工具包中的一個(gè)強(qiáng)大命令,專門用于監(jiān)控Linux系統(tǒng)中進(jìn)程級別的資源使用情況。與top、htop等工具不同,pidstat能夠提供按進(jìn)程、按用戶的詳細(xì)資源統(tǒng)計(jì),并且可以記錄歷史數(shù)據(jù)進(jìn)行分析。
為什么選擇pidstat而不是其他工具?
工具 | 優(yōu)勢 | 劣勢 |
top/htop | 實(shí)時(shí)交互,界面直觀 | 歷史數(shù)據(jù)難追蹤,批量監(jiān)控不便 |
ps aux | 快照信息,輕量級 | 瞬時(shí)數(shù)據(jù),無法看趨勢變化 |
pidstat | 可周期性監(jiān)控,可記錄歷史,可聚合分析 | 需要主動運(yùn)行,無交互界面 |
一、安裝與基礎(chǔ)使用
# Ubuntu/Debian sudo apt-get install sysstat
# CentOS/RHEL sudo yum install sysstat
# 啟用數(shù)據(jù)收集(默認(rèn)每10分鐘收集一次) sudo systemctl enable sysstat sudo systemctl start sysstat
最簡單的使用:查看所有進(jìn)程的CPU使用:
# 查看所有進(jìn)程的CPU使用情況 pidstat

三、pidstat的核心功能深度解析
3.1 CPU監(jiān)控模式(最常用)
基本語法:
# 每隔2秒統(tǒng)計(jì)一次,共統(tǒng)計(jì)5次 pidstat 2 5
實(shí)戰(zhàn)場景:發(fā)現(xiàn)CPU占用異常的進(jìn)程:
# 按CPU使用率排序查看 pidstat | sort -k8 -rn | head -10
# 持續(xù)監(jiān)控,每2秒刷新,重點(diǎn)觀察%usr(用戶態(tài)CPU)和%system(內(nèi)核態(tài)CPU) pidstat -u 2
關(guān)鍵指標(biāo)解析:
%usr:進(jìn)程在用戶態(tài)運(yùn)行的時(shí)間百分比
%system:進(jìn)程在內(nèi)核咨詢服務(wù)的時(shí)間百分比
%wait:進(jìn)程等待I/O的時(shí)間百分比
%CPU:總CPU使用率 = %usr + %system + %guest
CPU:進(jìn)程最后運(yùn)行的CPU編號
3.2 內(nèi)存監(jiān)控模式
基本用法:
# 查看內(nèi)存使用情況 pidstat -r

指標(biāo)深度解析:
指標(biāo) | 含義 | 診斷價(jià)值 |
minflt/s | 次要缺頁異常(每秒) | 從緩存/內(nèi)存加載數(shù)據(jù),正常情況 |
majflt/s | 主要缺頁異常(每秒) | 從磁盤加載數(shù)據(jù),需關(guān)注! |
VSZ | 虛擬內(nèi)存大小 | 進(jìn)程申請的地址空間 |
RSS | 實(shí)際物理內(nèi)存 | 進(jìn)程實(shí)際使用的物理內(nèi)存 |
%MEM | 內(nèi)存使用百分比 | 直觀的內(nèi)存占用比例 |
實(shí)戰(zhàn)場景:發(fā)現(xiàn)內(nèi)存泄漏
# 監(jiān)控Java進(jìn)程的內(nèi)存增長
pidstat -r -p 1234 1 60 | tee java_memory.log
# 分析輸出,如果RSS持續(xù)增長不釋放,可能存在內(nèi)存泄漏
# 注意觀察majflt/s,如果持續(xù)很高說明頻繁換頁,內(nèi)存不足
四、pidstat高級技巧
4.1 按用戶聚合統(tǒng)計(jì)
# 查看每個(gè)用戶的資源使用匯總
pidstat -u -t
# 或
pidstat -u | awk '{user[$2]+=$8} END{for(u in user) print u, user[u]}' | sort -k2 -rn
5.2 監(jiān)控子進(jìn)程
# 監(jiān)控進(jìn)程及其所有子進(jìn)程
pidstat -T CHILD
# 輸出會包含父進(jìn)程和所有子進(jìn)程的聚合統(tǒng)計(jì)
5.3 導(dǎo)出數(shù)據(jù)用于分析
# CSV格式輸出,方便導(dǎo)入Excel或Python分析
pidstat -urd 1 60 --human | awk 'BEGIN{OFS=","} NR>3{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14}' > monitoring.csv
# 使用gnuplot繪圖
pidstat -u 1 300 | grep java | awk '{print $1, $8}' > cpu_data.txt
gnuplot -e "set terminal png; set output 'cpu_usage.png'; plot 'cpu_data.txt' with lines title 'Java CPU Usage'"
五、實(shí)踐總結(jié)
掌握pidstat,你就能在性能問題出現(xiàn)時(shí),快速定位到具體的進(jìn)程和資源瓶頸,這是運(yùn)維工程師必備的核心技能之一。建議在日常工作中多加練習(xí),形成肌肉記憶,在真正的生產(chǎn)故障來臨時(shí),你就能從容應(yīng)對。
更多技術(shù)知識,藍(lán)隊(duì)云期待與你一起探索。