一、CHM 技术分析
1. CHM 核心功能
- 实时监控
:持续收集集群节点的OS资源数据(CPU、内存、I/O、网络、进程状态)。
- 历史数据分析
:存储数据到本地仓库(默认路径 $GRID_HOME/crf/db/),支持时间范围查询。
- 自动化诊断
:通过 diagcollection.pl 工具生成诊断报告,识别资源争用(如CPU、内存、网络心跳延迟)。
- 事件关联
:与Oracle Grid Infrastructure日志(如alert.log、crsd.log)结合,定位节点驱逐或实例崩溃的原因。
2. CHM 部署与配置
- 默认启用
:Oracle 11gR2 及更高版本中,CHM 随Grid Infrastructure自动安装。
- 代理进程
:每个节点运行 cssdmonitor 和 cssdagent 进程,负责数据收集。
- 数据存储
:数据保留7天(默认),可通过 oclumon 命令调整:
oclumon manage -repos checkretention # 查看保留策略
oclumon manage -repos updateretention 14 # 修改保留时间为14天
3. 关键诊断命令
- 查看集群状态
oclumon dumpnodeview -allnodes -v | grep -E "Node|State"
- 生成诊断报告
$GRID_HOME/bin/diagcollection.pl --collect --chmos
- 分析时间窗口数据
oclumon dumpnodeview -allnodes -last 30 # 过去30分钟的数据
二、测试案例:模拟集群问题并用CHM诊断
案例1:CPU资源争用导致性能下降
- 模拟场景
:在某一节点运行高CPU消耗脚本(如 stress -c 8)。
- CHM诊断步骤
oclumon dumpnodeview -allnodes -last 10 -metric "CPU_IDLE,CPU_SYS"
CPU_IDLE 接近0%,CPU_SYS 飙升至90%,确认CPU争用。
关联进程:通过top 或 ps -ef 查找占用CPU的进程(如stress)。
- 修复方案
:调整负载均衡或限制资源占用进程。
案例2:网络心跳延迟导致节点驱逐
- 模拟场景
:使用 tc 命令模拟网络延迟:
tc qdisc add dev eth0 root netem delay 500ms # 添加500ms网络延迟
- CHM诊断步骤
oclumon dumpnodeview -node -last 15 -metric "NETWORK_INTERFACE_MBPS,NETWORK_LATENCY"
发现NETWORK_LATENCY 超过阈值(默认200ms),触发节点驱逐。
结合alert.log 确认网络超时事件:
grep "EVMON" $GI_HOME/log//alert.log
- 修复方案
:修复网络配置或移除网络延迟模拟。
案例3:内存交换(Swap)引发性能问题
- 模拟场景
:通过 stress -m 1 --vm-bytes 16G 强制触发内存交换。
- CHM诊断步骤
oclumon dumpnodeview -allnodes -last 10 -metric "MEM_FREE,SWAP_USED"
发现
MEM_FREE 极低,SWAP_USED 持续增长。结合oswtop(OSWatcher)确认内存交换频率。
- 修复方案
:增加物理内存或优化应用内存配置。
三、CHM最佳实践
- 定期检查数据完整性
oclumon manage -get repsize # 确认存储空间充足
- 自动化报告生成
# 每天生成一次CHM报告
crontab -e
0 0 * * * $GRID_HOME/bin/diagcollection.pl --collect --chmos
- 结合其他工具
使用 OSWatcher 补充OS级监控。
使用 ADRCI 分析集群日志。
四、总结
CHM通过自动化收集OS级指标,显著缩短了诊断RAC集群问题的时间。对于瞬时故障(如网络闪断、资源瞬时争用),其历史数据回溯功能尤为关键。建议在问题复现时优先运行 diagcollection.pl 生成完整报告,并关联分析CHM指标与Grid Infrastructure日志。