Linux性能监控利器pidstat安装与使用指南
发布时间:2026/10/28 18:05:45 锦皓数字建站

1. 为什么我们需要pidstat工具在Linux系统性能监控领域pidstat绝对算得上是运维工程师的瑞士军刀。这个来自sysstat工具包的小巧命令能提供进程级的CPU、内存、IO等关键指标监控。与常见的top命令相比pidstat最大的优势在于精细化监控可以针对特定进程进行采样历史数据分析支持间隔采样和次数设置多维度统计涵盖CPU、内存、磁盘、线程等指标低开销对系统性能影响极小我曾在一次线上事故排查中用pidstat成功定位到一个Java应用的内存泄漏问题——通过持续监控发现某个进程的RSS内存以每小时50MB的速度稳定增长最终发现是第三方库的缓存未做上限控制。2. 安装前的准备工作2.1 检查现有环境在安装前建议先确认系统是否已安装sysstat包which pidstat /dev/null 21 echo 已安装 || echo 未安装如果系统已经预装但版本较旧低于11.5.5建议先卸载再安装新版# 查看当前版本 pidstat -V # 卸载旧版不同发行版命令可能不同 sudo apt remove sysstat # Debian/Ubuntu sudo yum remove sysstat # CentOS/RHEL2.2 系统兼容性确认pidstat作为sysstat工具集的一部分支持绝大多数主流Linux发行版发行版支持版本备注RHEL/CentOS6.x及以上EPEL源提供最新版本Ubuntu16.04及以上官方源版本可能较旧Debian9.x及以上建议使用backports源openSUSELeap 15.x及以上需添加OBS源获取最新版提示生产环境建议使用各发行版的LTS版本避免兼容性问题。3. 详细安装指南3.1 通过包管理器安装对于Debian/Ubuntu系统sudo apt update sudo apt install sysstat -y # 启用数据收集默认每10分钟采集一次 sudo sed -i s/^ENABLEDfalse/ENABLEDtrue/ /etc/default/sysstat sudo systemctl enable --now sysstat对于RHEL/CentOS系统sudo yum install epel-release -y sudo yum install sysstat -y # 启动服务 sudo systemctl enable --now sysstat对于Arch Linuxsudo pacman -S sysstat sudo systemctl enable --now sysstat3.2 源码编译安装获取最新版当需要特定功能或最新版本时推荐源码安装# 安装依赖 sudo apt install build-essential libncurses-dev -y # Debian/Ubuntu sudo yum install gcc make ncurses-devel -y # RHEL/CentOS # 下载解压 wget http://pagesperso-orange.fr/sebastien.godard/sysstat-12.7.2.tar.gz tar xvf sysstat-12.7.2.tar.gz cd sysstat-12.7.2/ # 编译安装 ./configure --prefix/usr \ --confdir/etc \ --disable-nls \ --disable-sensors make -j$(nproc) sudo make install编译参数说明--prefix指定安装目录--confdir配置文件路径--disable-nls禁用国际化减少依赖--disable-sensors不需要硬件传感器支持3.3 安装后验证执行以下命令验证安装成功pidstat -V # 预期输出示例sysstat version 12.7.2 (C) Sebastien Godard # 测试基本功能 pidstat 1 3 # 应显示每1秒采样一次共3次的进程统计4. 核心使用技巧4.1 常用监控场景CPU监控默认选项pidstat 2 5 # 每2秒采样共5次内存监控pidstat -r 1 3 # 监控内存使用磁盘IO监控pidstat -d 2 # 监控磁盘IO综合监控pidstat -urd -h 1 # 同时监控CPU、内存、IO人类友好格式4.2 高级用法示例监控特定进程pidstat -p 1234 1 5 # 监控PID为1234的进程线程级监控pidstat -t -p 1234 1 3 # 显示线程统计按用户筛选pidstat -u mysql 1 3 # 只监控mysql用户的进程生成CSV格式报告pidstat 1 3 -h -o CSV report.csv5. 常见问题排查5.1 安装问题问题1pidstat: command not found但sysstat已安装解决方案# 查找命令位置 find /usr/bin -name pidstat # 可能需添加PATH export PATH$PATH:/usr/local/bin问题2历史数据未记录检查项目# 确认服务运行 systemctl status sysstat # 检查配置 cat /etc/sysconfig/sysstat # RHEL/CentOS cat /etc/default/sysstat # Debian/Ubuntu5.2 使用问题问题3无磁盘统计信息解决方法# 检查内核是否支持 grep TASK_IO_ACCOUNTING /boot/config-$(uname -r) # 若不支持需重新编译内核问题4采样间隔不准确可能原因系统负载过高同时运行多个监控工具NTP时间同步问题5.3 性能优化建议采样频率生产环境建议不低于5秒间隔避免影响性能长期监控结合sar工具进行历史数据分析日志轮转定期清理/var/log/sa/目录下的历史数据告警集成通过脚本解析pidstat输出对接监控系统6. 生产环境实战案例6.1 CPU异常波动排查某次线上服务CPU使用率突然飙升通过以下命令定位pidstat -u 1 10 | tee cpu.log # 配合进程树查看 pidstat -t -u 1 3 | grep -A5 异常PID pstree -p 异常PID最终发现是某个定时任务异常执行导致。6.2 内存泄漏分析通过持续监控RSS内存增长watch -n 60 pidstat -r -p 服务PID 1 1 | grep -v Linux配合以下命令确认内存分配pmap -x 服务PID6.3 磁盘IO瓶颈诊断当系统IO等待较高时pidstat -d 1 5 | sort -nk4 | tail iostat -x 1 # 交叉验证曾用此方法发现一个日志组件配置错误导致过度刷盘的问题。7. 替代工具对比虽然pidstat很强大但有时也需要其他工具配合工具优势不足适用场景pidstat进程级监控低开销历史数据依赖sar实时进程分析top/htop交互式操作无持续记录功能快速系统概览atop综合性能分析资源消耗较大事后问题分析nmon多维度监控输出格式特殊长期性能趋势perf底层性能分析学习曲线陡峭深度性能调优建议将pidstat与sar结合使用# 查看历史数据 sar -p -u -r -d -n DEV 1 18. 监控集成方案8.1 与Prometheus集成通过node_exporter的textfile收集器# 创建采集脚本 cat EOF /etc/prometheus/pidstat.sh #!/bin/bash OUTFILE/var/lib/node_exporter/pidstat.prom pidstat -u -h -p ALL 1 1 | awk /^[0-9]/ { print pidstat_cpu_usage{pid$1,comm\$4\} $7 } $OUTFILE EOF chmod x /etc/prometheus/pidstat.sh8.2 日志分析技巧使用awk处理pidstat输出pidstat 1 3 | awk BEGIN { print 时间 PID CPU% 内存% } $1 ~ /^[0-9]/ { print $1,$3,$4,$7 } 8.3 自动化监控脚本示例#!/bin/bash THRESHOLD80 LOG_FILE/var/log/pidstat_monitor.log while true; do pidstat -u 1 1 | awk -v threshold$THRESHOLD $8 ~ /^[0-9]$/ $8 threshold { system(echo \strftime(%Y-%m-%d %H:%M:%S) 高CPU进程警报 PID:$3 使用率:$8%\ $LOG_FILE) } sleep 30 done9. 性能分析进阶技巧9.1 火焰图生成结合pidstat和perf生成火焰图# 先用pidstat定位高CPU进程 pidstat -u 1 5 # 对目标进程采样 perf record -F 99 -p 目标PID -g -- sleep 30 perf script | ./stackcollapse-perf.pl | ./flamegraph.pl pidstat.svg9.2 容器环境监控在Docker中监控特定容器CONTAINER_PID$(docker inspect --format {{.State.Pid}} 容器名) pidstat -p $CONTAINER_PID 1 39.3 系统调用跟踪当pidstat显示异常时进一步使用stracestrace -p 异常PID -c -f -o trace.log10. 配置优化建议10.1 sysstat调优编辑/etc/sysconfig/sysstat(RHEL)或/etc/default/sysstat(Debian)# 调整历史数据保留天数 HISTORY28 # 增加采样频率谨慎调整 SADC_OPTIONS-S XALL 60 # 每分钟采样10.2 内核参数优化对于高频监控场景建议调整# 增加进程监控精度 sysctl -w kernel.perf_event_paranoid1 # 提高采样上限 sysctl -w kernel.perf_event_max_sample_rate10000010.3 安全注意事项pidstat需要root权限才能获取完整信息生产环境慎用-p ALL参数可能产生大量数据监控脚本应限制日志大小避免磁盘写满敏感数据监控需符合审计要求
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。