读书笔记:
CHM
CHM(cluster health monitor)是Oracle提供的一款工具,用来收集操作系统的资源(CPU,内存,SWAP,进程,I/O以及网络等)的统计信息。从11.2.0.2版本开始,CHM会以初始化资源ora.crf的形式存在集群的每一个节点上。例如:
[grid@RAC1 ~]$ crsctl stat res -t -init
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.asm
1 ONLINE ONLINE rac1 Started
ora.cluster_interconnect.haip
1 ONLINE ONLINE rac1
ora.crf
1 ONLINE ONLINE rac1
ora.crsd
.......................................................................................................................................
相对于OSwatcher,CHM直接调用OS的API,系统开销更小,CHM每秒收集一次数据(在11.2.0.3版本当中,改为5s一次)具有更强的实时性。
而OSWatcher的优点是搜集的信息更加全面(例如:使用traceroute命令检测私网的连通性),而且所生成的数据保留的时间可以设置的很长,但是数据实时性没有CHM强,产生的信息可能占用很大的磁盘空间,因此这两个工具并不能互相代替,而是互补,如果可以,两个工具都使用。
CHM搜集的系统资源数据对于诊断系统的节点重启,hang,实例驱逐,性能问题都是非常有帮助的,另外用户可以使用CHM来及早发现一些系统负载异常,内存异常等问题,从而避免产生更加严重的问题,另外CHM还可以作为单独的工具安装在Linux和Windows平台上。
CHM主要由下面组件构成:
组件1:CHM档案库(Repository):它是一个Berkeley数据库(12c版本开始使用Oracle数据库,称为GIMR)作为保存从各个节点搜集到的操作系统统计信息的档案库,默认情况下,它会存在<gi_home>/crf/db/<节点名>下,默认占用1GB的磁盘空间。对于绝大数的系统,每个节点每天搜集的统计信息大约会占用500M左右的空间。这里要强调的是CHM最大的信息保留天数为3天,这样做的目的就是为了减少CHM档案库所占用的磁盘空间。
组件2:系统监控服务(System Monitor Service):它会以osysmond.bin守护进程的方式在所有节点运行,osysmond.bin负责定期搜索本地节点的操作系统信息,并将搜集到的信息发给主节点上的集群日志服务。
组件3:集群日志服务(Cluster Logger Service):这个进程会以守护进程ologgerd的形式运行在集群的CHM的主节点(Master Node)和(Replication Node)上。主节点的ologgerd负责接收从所有节点的osysmond.bin发送过来的操作系统信息,并记录到主节点的CHM档案库中;副节点ologgerd负责接收从主节点的集群日志服务发送过来的操作系统统计信息,并记录到副节点的CHM档案库,从而实现CHM档案库的高可用性。
下图是CHM的工作方式:
CHM的工作方式
步骤1:各个节点osymond通过集群私网向主节点的ologgerd发送本地节点的操作系统统计信息。
步骤2:主节点ologgerd向本地节点的CHM档案库写入收集到的统计信息,同时发送给副节点ologgerd。
步骤3:副节点ologgerd向本地节点的CHM档案库写入收集到的统计信息。
若CHM主节点出现问题,副节点会接管CHM并成为新的主节点,之后新的主节点会从集群其他正常节点当中再选出新的副节点。osysmond和ologgerd以守护进程都会以实时优先级运行,以确保CHM能够准确的准时的搜集操作系统信息。
[grid@RAC1 ~]$ ps -ef | grep osysmond
root 2204 1 2 10:41 ? 00:01:17 /u01/app/11.2.0/grid/bin/osysmond.bin
grid 18832 5678 0 11:45 pts/0 00:00:00 grep osysmond
[grid@RAC1 ~]$ ps -ef | grep ologgerd
root 2341 1 2 10:42 ? 00:01:44 /u01/app/11.2.0/grid/bin/ologgerd -M -d /u01/app/11.2.0/grid/crf/db/rac1
grid 18926 5678 0 11:45 pts/0 00:00:00 grep ologgerd
Oracle提供了oclumon和CHMOSG两款工具来访问CHM的数据,CHMOSG是图形化界面工作,oclumon是命令行工具,这里只介绍oclumon命令。
(1)命令1:查看主节点和副节点
[grid@RAC1 ~]$ oclumon manage -get MASTER REPLICA
Master = rac1
Replica = rac2
Done
(2)命令2:查看当前的统计信息的保存时间
[grid@RAC1 ~]$ oclumon manage -get repsize
CHM Repository Size = 61511
Done
(3)命令3:搜集一段时间内各个节点的统计信息
[grid@RAC1 ~]$ oclumon dumpnodeview -allnodes -v -s "2018-10-03 10:50:00" -e "2018-10-03 10:57:00" > /tmp/chm.log
[grid@RAC1 ~]$ more /tmp/chm.log --这里面有大量信息,每隔一秒收集的一次信息在各个节点,信息量很大。
----------------------------------------
Node: rac2 Clock: '10-03-18 10.50.00' SerialNo:91
----------------------------------------
SYSTEM:
系统的信息,包括CPU的数量,内存使用情况,磁盘基本信息。
#pcpus: 1 #vcpus: 1 cpuht: N chipname: Intel(R) cpu: 90.83;';3:Time=10-03-18 10.50.00, CPU usage on node rac2 (90.83%) is Very High (> 90%). 6 processes are waiting for only 1 CPU
s.' cpuq: 6 physmemfree: 384312 physmemtotal: 1923704 mcache: 621344 swapfree: 4128760 swaptotal: 4128760 ior: 0 iow: 78 ios: 17 swpin: 0 swpout: 0 pgin: 0 pgout: 39 netr: 9.472 n
etw: 15.208 procs: 169 rtprocs: 10 #fds: 12672 #sysfdlimit: 6815744 #disks: 5 #nics: 3 nicErrors: 0
使用资源最多的进程包括消耗CPU最多的进程,消耗内存最多的进程,使用文件描述符(FD)最多的进程,线程最多的进程。
TOP CONSUMERS:
topcpu: 'asm_vktm_+ASM2(2844) 2.79' topprivmem: 'ologgerd(2831) 87500' topshm: 'ologgerd(2831) 64704' topfd: 'crsd.bin(2959) 133' topthread: 'console-kit-dae(2083) 64'
磁盘的I/O性能信息包括I/O的读写次数,队列长度,等待次数。
DEVICES:
dm-1 ior: 0.000 iow: 0.000 ios: 0 qlen: 0 wait: 0 type: SWAP
dm-0 ior: 0.000 iow: 39.120 ios: 9 qlen: 0 wait: 2 type: SYS
sdc ior: 0.000 iow: 0.000 ios: 0 qlen: 0 wait: 0 type: SYS
sdb ior: 0.997 iow: 0.498 ios: 2 qlen: 0 wait: 12 type: SYS
sdb4 ior: 0.997 iow: 0.498 ios: 2 qlen: 0 wait: 12 type: SYS
sdb3 ior: 0.000 iow: 0.000 ios: 0 qlen: 0 wait: 0 type: SYS
sdb2 ior: 0.000 iow: 0.000 ios: 0 qlen: 0 wait: 0 type: SYS
sdb1 ior: 0.000 iow: 0.000 ios: 0 qlen: 0 wait: 0 type: SYS
sda ior: 0.000 iow: 39.120 ios: 4 qlen: 0 wait: 3 type: SYS
sda2 ior: 0.000 iow: 39.120 ios: 4 qlen: 0 wait: 1 type: SYS
sda1 ior: 0.000 iow: 0.000 ios: 0 qlen: 0 wait: 0 type: SYS
网卡的统计信息包括网卡的发送和接受性能信息,错误数量等,而且集群公网和私网信息也包含在内。
NICS:
lo netrr: 2.076 netwr: 2.076 neteff: 4.152 nicerrors: 0 pktsin: 3 pktsout: 3 errsin: 0 errsout: 0 indiscarded: 0 outdiscarded: 0 inunicast: 3 innonunicast: 0 type: PUBL
IC
eth0 netrr: 0.278 netwr: 0.163 neteff: 0.441 nicerrors: 0 pktsin: 3 pktsout: 1 errsin: 0 errsout: 0 indiscarded: 0 outdiscarded: 0 inunicast: 3 innonunicast: 0 type: PU
BLIC
eth1 netrr: 7.116 netwr: 12.968 neteff: 20.084 nicerrors: 0 pktsin: 16 pktsout: 18 errsin: 0 errsout: 0 indiscarded: 0 outdiscarded: 0 inunicast: 16 innonunicast: 0 typ
e: PRIVATE latency: 10
Oracle_home所在文件系统的空间使用情况
FILESYSTEMS:
mount: / type: rootfs total: 33309492 used: 15064620 available: 16552816 used%: 47 ifree%: 93 [ORACLE_HOME]
不同网络协议由于不同原因造成的错误的统计信息
PROTOCOL ERRORS:
IPHdrErr: 0 IPAddrErr: 2 IPUnkProto: 0 IPReasFail: 0 IPFragFail: 0 TCPFailedConn: 17 TCPEstRst: 14 TCPRetraSeg: 0 UDPUnkPort: 256 UDPRcvErr: 0
其他节点信息被输出
----------------------------------------
Node: rac1 Clock: '10-03-18 10.50.02' SerialNo:95
----------------------------------------
SYSTEM:
#pcpus: 1 #vcpus: 1 cpuht: N chipname: Intel(R) cpu: 15.99 cpuq: 3 physmemfree: 422628 physmemtotal: 1923704 mcache: 640496 swapfree: 4128760 swaptotal: 4128760 ior: 0 iow: 86 ios
: 20 swpin: 0 swpout: 0 pgin: 0 pgout: 46 netr: 7.946 netw: 9.018 procs: 179 rtprocs: 10 #fds: 12896 #sysfdlimit: 6815744 #disks: 5 #nics: 3 nicErrors: 0
TOP CONSUMERS:
topcpu: 'ologgerd(2341) 3.19' topprivmem: 'ologgerd(2341) 93312' topshm: 'ologgerd(2341) 64704' topfd: 'crsd.bin(3036) 151' topthread: 'console-kit-dae(1968) 64'
PROCESSES: