某客户运行 goldengate 服务的机器上存在较长期的 kernel CPU 占用率偏高问题( ~24% ),同时文件路径查找 (Namei) 通常在 5 万次每秒以上。
!
从 perfpmr 性能数据, oracle goldengate 进程 (ggsci) 存在频繁访问时区信息的现象。系统中 100 多个 ggsci 进程总共访问时区文件频次达到 5~6 万次每秒,导致目录查找出现较严重冲突,造成了近 20% 的 kernel CPU 消耗,对系统的稳定造成了较大的干扰。
如下是对某个 ggsci 进程的 truss 信息,可以看到该 ggsci 进程在不到 1 毫秒的间隔内存在多次对 /usr/share/lib/zoneinfo//Asia/Shanghai 目录文件的访问。其他 ggsci 进行也存在同样的现象:
/tmp/perfdata# truss -d -fael -p 59901430
59901430: psargs: ./ggsci PORT 7700-7900 -m 7839
59901430: = 0
59901430: 74121683: 0.0000: access("gglog-ggsci.xml", 04) Err#2 ENOENT
59901430: 38208801: 0.0002: statx("/usr/share/lib/zoneinfo//Asia/Shanghai", 0x0FFFFFFFFFFC4060, 176, 0) = 0
59901430: 74121683: 0.0011: access("./gglog-ggsci.xml", 04) Err#2 ENOENT
59901430: 74121683: 0.0013: access("/ACFS01/OGG/goldengate/gglog-ggsci.xml", 04) Err#2 ENOENT
59901430: 38208801: 0.0015: statx("/usr/share/lib/zoneinfo//Asia/Shanghai", 0x0FFFFFFFFFFC4060, 176, 0) = 0
59901430: 74121683: 0.0055: access("gglog.xml", 04) Err#2 ENOENT
59901430: 74121683: 0.0062: access("./gglog.xml", 04) Err#2 ENOENT
59901430: 38208801: 0.0073: statx("/usr/share/lib/zoneinfo//Asia/Shanghai", 0x0FFFFFFFFFFC4060, 176, 0) = 0
59901430: 74121683: 0.0074: access("/ACFS01/OGG/goldengate/gglog.xml", 04) Err#2 ENOENT
59901430: 38208801: 0.0099: statx("/usr/share/lib/zoneinfo//Asia/Shanghai", 0x0FFFFFFFFFFC4060, 176, 0) = 0
59901430: 38208801: 0.0104: statx("/usr/share/lib/zoneinfo//Asia/Shanghai", 0x0FFFFFFFFFFC4060, 176, 0) = 0
59901430: 38208801: 0.0111: statx("/usr/share/lib/zoneinfo//Asia/Shanghai", 0x0FFFFFFFFFFC4060, 176, 0) = 0
通过比对perfpmr数据,确认当前环境存在IV86730高危缺陷。 该缺陷导致 ggsci 进程在获取本地时间时(通常是通过 localtime 等调用),存在反复调用 tzset/stat 跟踪时区文件变化的问题,会对系统系统造成较大影响。
补丁详细信息如下:
IV86730: PERFORMANCE REGRESSION WHEN USING OLSON TIMEZONE FORMAT APPLIES TO AIX 7100-04
https://www.ibm.com/support/pages/apar/IV86730
Problem summary
*
Problem conclusion
Timezone function tzset() was calling stat() on every call to
check for updates to the timezone rules file. This stat() call
is costly and was impacting the performance of all timezone
functions.
.
Added a limit to only call stat() a maximum of once every
minute.
Local fix
Using POSIX timezone format will avoid this issue.
Temporary fix
*
*
Comments
6100-09 - use AIX APAR IV86773
7100-04 - use AIX APAR IV86730
7200-01 - use AIX APAR IV86755
#改进措施
可以考虑如下任意一种解决当前 kernel CPU 占用高的问题:
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论