pidstat 仅支持单机监控,需结合远程执行与聚合分析实现跨节点监控;须在各节点安装 sysstat,用 pgrep 动态获取 pid,通过 ssh/pdsh/ansible 批量采集,并辅以 -h、-h 参数及多维指标交叉验证定位真实瓶颈。

pidstat 本身不直接支持跨节点监控,它只作用于当前 Linux 主机。要监控分布式集群节点的性能开销,需将 pidstat 作为单节点采集工具,配合远程执行与聚合分析机制来实现。
在每个节点上部署 pidstat 采集
确保所有集群节点都已安装 sysstat(含 pidstat):
- Ubuntu/Debian:sudo apt install sysstat
- RHEL/CentOS/Fedora:sudo yum install sysstat 或 sudo dnf install sysstat
验证可用性:pidstat -V。建议启用 sysstat 的系统级轮询(/etc/default/sysstat 中设 ENABLED="true"),便于事后回溯历史数据。
按需选择进程并动态获取 PID
集群服务(如 Kafka broker、etcd、TiKV、Flink TaskManager)常以多实例或动态端口方式运行,不宜硬编码 PID。推荐用 pgrep 精准匹配:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 匹配完整启动命令(含参数):pgrep -f "java.*kafka.Kafka"
- 匹配进程名并输出 PID+命令:pgrep -l "redis-server"
- 组合使用避免漏采:pidstat -p "$(pgrep -f 'python.*airflow')" -ur 2(每 2 秒采 CPU+内存)
注意:若一个服务有多个 worker 进程,pidstat 支持传入多个 PID(空格分隔),会自动合并输出,无需循环调用。
远程批量执行与结果收集
借助 SSH 批量拉取各节点指标,例如监控所有节点上 Java 进程的 CPU 和内存占用:
- 写简短脚本遍历节点列表:for node in node1 node2 node3; do echo "== $node =="; ssh "$node" "pidstat -p \$(pgrep java) -ur 1 3 | tail -n +4"; done
- 用 pdsh、clustershell 或 Ansible 实现并行执行,提升效率
- 关键建议:加 -h 参数让内存单位自动转为 M/G,加 -H 输出高精度时间戳,便于对齐多节点时序
识别真实瓶颈而非表面数值
分布式场景下,单看 %CPU 或 RSS 容易误判。需结合上下文交叉验证:
- %CPU 接近 100%?检查是否单核打满(CPU 列显示具体核号),还是多线程分散在多个核——此时总和可能达 300+;
- RSS 持续上涨?用 pidstat -p PID -r -H 1 观察趋势,并同步查 cat /proc/PID/status | grep -E "(VmRSS|MmuPageSize)",排除透明大页(THP)导致的虚高;
- I/O 延迟高?先用 pidstat -d 看进程级读写速率,再结合 iostat -x 1 确认设备级 await、%util 是否异常;
- 上下文切换频繁?pidstat -w 中 nvcswch/s(非自愿切换)突增,往往指向锁竞争或 CPU 资源争抢,常见于高并发 RPC 服务节点。
真正有效的集群性能监控,是把 pidstat 当作“进程显微镜”,配合节点发现、时间对齐、阈值告警和横向对比,才能从一堆数字里揪出那个拖慢整个链路的异常节点。










