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

使用lsof工具监控进程文件句柄使用情况

字数 1949阅读 3702评论 0赞 0

故障现象

Oracle GoldenGate 长期运行后, ggsci 会频繁报告 Too many open files 错误。

lsof工具安装

lsof(list open files)是普渡大学开发的UNIX平台工具,用于列出所有打开的文件。由于UNIX的哲学是一切皆文件,因此,不仅仅标准的文件,网络连接、硬件设备等都可以通过lsof来查询。
lsof工具在AIX上可以通过AIX Web Download Pack Programs获取,与此相同的还有其他一些开源工具如OpenSSH、openssl等。其网址如下:
https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=aixbp

工具以文件集fileset方式组织,使用smitty install方式安装即可(需要Accept New license)。

系统数据分析

跟踪 ggsci 进程发现,该 OGG 进程有大量 TCP 连接处于 CLOSED 状态:

/tmp/lsof/lsof_4.891# lsof -p 41945024

。。。 部分省略

ggsci  41945024 oracle  4u  IPv6 0xf1000e00a382fbb8  0t0  TCP *:* (CLOSED)

ggsci  41945024 oracle  5u  IPv6 0xf1000e0055e463b8  0t0  TCP *:* (CLOSED)

ggsci  41945024 oracle  6u  IPv6 0xf1000e002e68b3b8  0t0  TCP *:* (CLOSED)

。。。部分省略

ggsci  41945024 oracle  72u  IPv6 0xf1000e00a18aabb8  0t0  TCP *:* (CLOSED)

ggsci  41945024 oracle  73u  IPv6 0xf1000e009a1163b8  0t0  TCP *:* (CLOSED)

ggsci  41945024 oracle  74u  IPv6 0xf1000e00a1a57bb8  0t0  TCP *:* (CLOSED)

ggsci  41945024 oracle  75u  IPv6 0xf1000e00b72afbb8  0t0  TCP *:7771 (LISTEN)
。。。

从系统层面统计看,已经存在 9464 个 TCP 连接处于 CLOSED 状态,而且这些连接均属于 OGG :

/tmp/lsof/lsof_4.891# netstat -Aan|grep CLOSED|wc -l

 9464

:/tmp/lsof/lsof_4.891# netstat -Aan|grep CLOSED|pg

。。。

f1000e00bcbd43b8 tcp  0  0  *.*  *.*  CLOSED

。。。

/tmp/lsof/lsof_4.891# rmsock f1000e00bcbd43b8 tcpcb

The socket 0xf1000e00bcbd4008 is being held by proccess 6293238 ( ggsci ).

参考TCP 协议规范, CLOSED 状态不是一个真正的状态,而是TCP 状态变迁的假想起点和终点。经过确认,日志中 OGG 进程所处的 ”TCP : (CLOSED)”状态为起点状态;即 ggsci 进程调用了 socket 接口创建相应的文件句柄,调用形式例如 socket( AF_INET,SOCK_STREAM, 0 ) ,但没有后续 connect 建立连接,或 listen 监听操作,也没有 close 释放操作。

说明:
没有 OGG 运行的环境中通常不会看到大量 TCP 连接处于 CLOSED 状态。作为对比, OGG 环境中存在上万 TCP 连接处于 CLOSED 状态。

分析结论

从目前掌握的数据看, OGG 进程存在较大量的未使用的 socket 句柄( 当前环境已经存在 9464 个未使用 socket 句柄 ),没有进行后续 listen/connect 动作,也没有 close 释放相应的 socket 句柄资源。

这很可能导致了 OGG 文件句柄资源泄露,长期累积可能造成句柄资源耗尽,引发 too many open files 报错。

经过沟通,客户确认与 OGG Director 功能有关,停止该服务后 kernel 降低到个位数,泄露句柄数也从一万左右下降到个位数。

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

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广