欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

描述一次Pushgateway因为文件描述符使用过多未释放的问题经历

最编程 2024-02-29 15:04:12
...

1. 问题描述:

Flink上报metrics到pushGateway,pushGwateway因打开在多文件而拒绝Flink TaskManager上报数据的连接。查看pushGateway的日志如下:

2022/09/27 03:09:33 http: Accept error: accept tcp 0.0.0.0:9091: accept4: too many open files; retrying in 160ms
2022/09/27 03:09:33 http: Accept error: accept tcp 0.0.0.0:9091: accept4: too many open files; retrying in 320ms
2022/09/27 03:09:33 http: Accept error: accept tcp 0.0.0.0:9091: accept4: too many open files; retrying in 640ms

2. 问题定位过程

2.1首先查看系统的设置的最大文件句柄数:

ulimit -a 

或者 cat /etc/security/limits.conf

接着查看应用可打开的最大文件数:

 可见,应用可以打开的文件句柄已经相当大了。问题应该不在于此。

2.2 lsof查看应用打开的文件句柄:

lsof -p pid |wc -l 

看到应用打开的文件数在持续增加,没有减少。

2.3 查看对应的进程的fd/目录下的文件情况 ,

ls /proc/pid/fd/ |wc -l

ll|head -20

 找一个 inode, 在linux的TCP连接信息文件中查看有没有对应记录,socket:[xxxxxx]表示文件inode号, 100011, 100010等表示文件句柄。

cat /proc/net/tcp |grep 94859722

发现是空的。可以猜测是否pushGateway对应的TCP连接已经释放,但对应的文件句柄未清理。

只能做这种推测,

验证:可以 ss 查看具体的连接,在/proc/net/tcp中查看对应的inode, 等连接释放后,再去/proc/pid/fd/下面看对应的文件句柄是否被回收。

例如: ss - plta |grep pid

 ll /proc/pid/fd/ |grep fd

 以fd为141154为例:

过段时间再用ss -plta 查看,以及查看对应的tcp连接和fd下面的文件句柄

 tcp信息已经不存在了,但文件句柄还残存着。

科普一下:/proc/pid/fd文件下存放的是什么

原文地址:https://www.cnblogs.com/weizaiyan/p/16739305.html

推荐阅读