RHCA07-Linux跟踪工具及CPU调优
Linux跟踪工具与CPU调优笔记
一、Linux跟踪工具
-
strace
系统调用跟踪- 核心功能:
- 监控进程的系统调用、信号传递和状态变更
- 诊断性能瓶颈和异常行为
- 关键参数:
参数 作用 示例场景 -tt
毫秒级时间戳 精确记录调用时序 -T
显示调用耗时 定位性能瓶颈(如 lstat
占38%时间)-e trace=file
只跟踪文件操作 strace -e trace=file cp
-f
跟踪子进程 分析 nginx
及其子进程-p
跟踪运行中进程 strace -p <PID>
- 典型应用:
updatedb
优化:发现lstat
和write
是主要耗时操作- 配置查找:
strace php 2>&1 | grep php.ini
追踪配置文件路径 - 故障诊断:分析
iptables -L
卡顿(检查/etc/resolv.conf
加载)
- 核心功能:
-
SystemTap
内核诊断- 核心优势:
- 免编译内核:通过脚本动态插入探针收集数据
- 生产友好:开发机编译模块 → 生产机直接运行
- 部署流程:
- 注意事项:
- 内核版本必须严格匹配
- 普通用户需加入
stapusr
组 - 模块存放路径:
/lib/modules/<内核版本>/systemtap/
- 核心优势:
二、CPU调优技术
-
IRQ中断均衡
- 核心问题:网卡流量过大时软中断集中单核
- 优化步骤:
- 查看中断分布:
cat /proc/interrupts
- 关闭默认均衡:
systemctl stop irqbalance
- 手动绑定CPU:
# 绑定中断19到CPU0和CPU1 echo 3 > /proc/irq/19/smp_affinity # 3=二进制0011 (CPU0+1)
- 查看中断分布:
- 掩码计算:
CPU 掩码值 二进制 0 1 0001 1 2 0010 2 4 0100 3 8 1000
-
进程绑定(
taskset
)- 缓存敏感型程序:
# 绑定进程到CPU0和CPU1 taskset -p 3 <PID>
- 查看运行位置:
ps -o psr -p <PID>
- 服务级持久化:
[Service] ExecStartPost=/bin/bash -c "taskset -p 3 ${MAINPID}"
- 缓存敏感型程序:
-
cpuset资源隔离
- NUMA架构优化:
# 创建web服务cpuset mkdir /sys/fs/cgroup/cpuset/web echo 0 > web/cpuset.cpus # 绑定CPU0 echo 0 > web/cpuset.mems # 绑定内存zone0 echo <PID> > web/tasks # 加入进程
- 独占模式:
echo 1 > cpuset.exclusive
- NUMA架构优化:
三、性能诊断案例
故障现象 | 诊断命令 | 根因分析 |
---|---|---|
iptables -L 卡顿 | strace -e trace=file iptables -L | DNS查询超时(检查resolv.conf ) |
df -h 响应慢 | strace -e trace=read df -Th | NFS挂载故障 |
单CPU软中断100% | cat /proc/interrupts | 网卡中断未均衡 |
服务启动失败 | strace -f systemctl start nginx | 配置文件路径错误 |
四、知识小结
知识点 | 核心要点 | 调优场景 |
---|---|---|
strace | 通过系统调用分析程序行为(-T 看耗时,-e 过滤事件) | 命令执行慢/服务启动失败 |
SystemTap | 动态内核诊断(版本严格匹配,模块化部署) | 深度性能分析/内核级监控 |
IRQ均衡 | 手动绑定中断掩码(/proc/irq/XX/smp_affinity ) | 网络密集型应用 |
taskset | 进程绑定提升缓存命中率(缓存敏感型程序优先) | 循环密集型计算任务 |
cpuset | CPU+内存分区隔离(支持NUMA,需设置cpuset.mems ) | 数据库/Web服务资源隔离 |
黄金法则:
- 性能诊断:先用
strace
定位用户空间问题,再用SystemTap
分析内核瓶颈- CPU绑定:I/O密集型用默认均衡,计算密集型用
taskset
固定CPU- 生产慎用:
SystemTap
模块需严格测试,避免内核崩溃