上一篇
使用 LR 监控 Linux,需先装 Agent,选对应 OS 版本;通过 SSH/Telnet 等协议连目标机;在控制器建场景,添加服务器及
监控指标,如 CPU、内存等,即可实时
在性能测试场景中,通过 LoadRunner (LR) 对 Linux 系统进行实时监控是保障测试有效性的核心环节,以下从原理、工具链、实操步骤、数据关联等维度展开详述,并提供完整解决方案。
核心监控目标与技术路径
| 监控类别 | 典型指标 | LR关联价值 |
|---|---|---|
| CPU利用率 | us/sy/id/wa百分比、上下文切换次数 | 定位计算瓶颈、线程竞争 |
| 内存使用 | RSS/VIRT/SWAP用量、OOM杀手触发次数 | 发现内存泄漏、页交换异常 |
| 磁盘IO | IOPS、读写延迟、队列长度、%util | 评估存储子系统承载能力 |
| 网络收发包 | rx/tx速率、错误丢包率、TCP重传次数 | 验证网络层吞吐量与稳定性 |
| 进程级资源消耗 | 单进程CPU/MEM/FD占用、线程数、打开文件描述符 | 精准定位高负载业务进程 |
| 系统级事件 | 内核日志(dmesg)、死锁检测、硬件中断分布 | 捕捉潜在系统级故障 |
▶ 实施架构图解
[LR控制器] → [监控代理] ↔ [Linux被测机]
↓
[数据采集器] → [结果数据库] → [Analysis分析报告]
注:可通过两种方式实现:①直接在被测机部署采集脚本;②通过SSH/API由LR主控端拉取数据。
原生命令行工具集锦
即时状态查看(动态刷新)
| 命令 | 功能说明 | 关键参数解析 |
|---|---|---|
top -H -p <pid> |
显示指定进程的线程级资源占用 | -H启用线程视图,-p指定进程ID |
vmstat 1 |
每秒输出虚拟内存统计 | procs列显示创建/销毁进程数 |
iostat -x 1 |
扩展磁盘IO统计,含%user/%system/%wait | await反映平均等待时间,svctm为服务时间 |
pidstat -h |
按进程统计CPU历史趋势 | UID字段可映射至登录用户 |
netstat -i |
网络接口流量统计 | 关注eth0等网卡的rx/tx bytes |
历史数据分析(日志回溯)
| 命令 | 适用场景 | 输出特征 |
|---|---|---|
sar -u -f /var/log/sa/saDD |
解析每日CPU日志 | 自动识别时间范围,支持--iface过滤网卡 |
dstat --output |
生成CSV格式报表 | 便于导入Excel做二次加工 |
psrecord |
RedHat系专用进程追踪工具 | 需配合sysstat包使用 |
深度诊断工具
| 工具名称 | 独特优势 | 典型用法 |
|---|---|---|
perf record |
火焰图生成,精确定位热点函数 | perf script转换二进制栈迹为可读调用链 |
eBPF Toolkit |
无侵入式内核探针,捕获系统调用耗时 | bpftrace提供交互式调试环境 |
lsof -p <pid> |
查看进程打开的文件/网络连接 | 排查文件句柄未释放导致的资源耗尽 |
自动化监控方案设计
方案A:Shell脚本+LR Vuser集成
#!/bin/bash
# 监控脚本模板 monitor.sh
INTERVAL=5 # 采样间隔(秒)
DURATION=$((60${VUSER_RUNTIME})) # 总时长=运行时长
while [ $ELAPSED -lt $DURATION ]; do
# 采集关键指标
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2+$4}')
MEM=$(free | grep Mem | awk '{print $3/$2100}')
DISK=$(iostat -c | awk 'NR==4{print $1}')
# 写入LR支持的.csv格式
echo "$(date +%T),$CPU,$MEM,$DISK" >> /tmp/metrics.csv
sleep $INTERVAL
done
集成要点:
- 将脚本上传至被测机
/opt/monitor目录 - 在LR Vuser脚本中添加
os.system("nohup /opt/monitor/monitor.sh &") - 测试结束后通过
lr_upload_dataAPI上传监控文件
方案B:Ansible Playbook批量部署
hosts: all
tasks:
name: Install monitoring tools
apt: name=sysstat state=present update_cache=yes
name: Start sar collection
command: sar -o /var/log/sa/myapp.log 1 >/dev/null 2>&1
name: Deploy custom collector
template: src=collector.j2 dest=/usr/local/bin/mycollector.sh mode=755
优势:支持跨节点统一配置,适配分布式测试环境。
数据关联与根因分析
三维关联模型
| 维度 | 数据源 | 分析方法 | 示例上文归纳 |
|---|---|---|---|
| 时间轴 | LR事务响应时间 vs syslog | 叠加时间序列找突变点 | “14:30出现慢查询,对应DB连接池耗尽” |
| 进程树 | pstack
|
定位库依赖导致的加载延迟 | “libcrypto.so.3缺失引发初始化超时” |
| 资源竞争 | strace -f | 观察系统调用阻塞情况 | “futex()等待导致线程休眠” |
可视化技巧
- Gnuplot绘图:将
metrics.csv转换为图像嵌入LR报告set title "CPU vs Response Time" plot "response.dat" using 1:2 with lines title "TPS", "cpu.dat" using 1:2 with lines title "CPU%" - Heatmap热力图:用R语言绘制全天资源使用密度图
library(ggplot2) ggplot(data, aes(x=hour, y=metric, fill=value)) + geom_tile() + scale_fill_gradientn(colors=brewer.pal(9,"Reds"))
常见问题解决手册
Q1: 为何无法获取/proc/<pid>/status中的线程信息?
原因:SELinux策略限制或缺少debuginfo包
解决方案:
- 临时关闭SELinux:
setenforce 0 - 安装调试符号表:
yum install kernel-debuginfo-$(uname -r) - 修改系统配置:
echo 0 > /proc/sys/kernel/kptr_restrict
Q2: 如何区分业务压力导致的CPU升高还是后台任务干扰?
诊断步骤:
- 执行
ps aux --sort=-%cpu查看TOP5进程 - 使用
prlimit限制非关键进程的资源配额 - 对比
/proc/loadavg中的三个平均值:- 短期负载骤升→突发业务请求
- 中长期负载持续高位→后台批处理任务
- 启用
auditd审计特定用户组的进程启动行为
进阶优化建议
- 预置阈值告警:在
/etc/modprobe.d/alert.conf中配置:alias net-livedump off options snd-hda-intel index=0 bdl=off power_save=0
- 容器环境适配:对于Docker环境,需额外监控:
docker stats --no-stream获取容器级指标crictl inspect查看runc运行时的状态
- 硬件直连监测:通过IPMI工具获取真实的服务器功耗、温度数据,建立能效比模型。
通过上述体系化监控方案,可实现从操作系统底层到应用层的全链路可视,为性能调优提供精确的数据支撑,实际实施时需根据具体测试场景选择工具组合,建议优先采用轻量级方案(如方案A),复杂场景可引入Prometheus+Grafana构建
