charleschchen
作者charleschchen2021-09-01 12:31
系统架构师, 浪潮商用机器有限公司

时区设置导致AIX kernel CPU偏高问题分析

字数 3448阅读 3724评论 0赞 0

问题现象

某客户运行 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

  • USERS AFFECTED:
  • Systems running the AIX 7100-04 Technology Level
  • with bos.rte.libc at the 7.1.4.1 level.

  • PROBLEM DESCRIPTION:
  • A significant performance regression was introduced in the
  • time related APIs when the Olson timezone format is used.
  • (ex: "TZ=America/Sau_Paulo")

*

  • Calls to time functions such as tzset(), mktime(), and
  • localtime() may take significantly longer to complete,
  • which can compound and have an impact on application
  • performance, depending on how the application uses these
  • function calls.

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

*

  • HIPER *

*

Comments

6100-09 - use AIX APAR IV86773

7100-04 - use AIX APAR IV86730

7200-01 - use AIX APAR IV86755

#改进措施
可以考虑如下任意一种解决当前 kernel CPU 占用高的问题:

  1. 升级系统版本到 7100-04-08-1914 ( 2019 年 7 月发布);
  2. 使用 POSIX 时区可以规避 IV86730 问题;
    当前系统时区格式为 Olson 格式,建议修改为 POISIX 格式:
    修改 AIX /etc/environment 文件,将 TZ=Asia/Shanghai改为TZ=BEIST-8.
    中国区没有夏令时,直接使用 POSIX 格式更为简便。 两者差别参考: POSIX and Olson time zone formats http://www.ibm.com/developerworks/aix/library/au-aix-posix/index.html

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广