Kafka报too many open files.

一如乞人不需要形象 发表于: 2021-03-02   最后更新时间: 2021-03-02 21:26:28   2,583 游览

问题描述:

最近cluster里有台机器挂了报too many open files, 以前遇到过,改配置,改成ulimit -n 10000000,重启kafka,还是不行,lsof | wc -l 从平常的80000多涨到挂掉(ulimit -a 看open files已经改到1000万,然后无意中看到磁盘快满了,还剩2G左右,因为kafka起不来,就直接删/logs底下超过一天的文件,然后再起,目前还没挂。

问题:

  1. 是因为磁盘满了的原因吗?
  2. 观察其他环境的open files,都是20w左右的,唯独这台,即使work了,也是300多w,而且ulimit -a 显示是配置的204800,这是什么情况。。

感谢大佬回复。

发表于 2021-03-02
添加评论
lsof -p 你kafka的进程号 | wc -l

先确定是不是kafka占用的。

日志里是否有什么异常?

我用的这个命令watch “lsof | wc -l” ,在start kafka后明显增加至百万级别,kafka挂了后恢复至8万左右,log就是too many open files的Excpetion, 有次出现kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection,重启之后就没报了

一般不是kafka集群的问题,一般是kafka生产者连接泄露(反复连接kafka)
你可以使用netstart -unltpa|grep 9092看看连接数。

watch这个参数,由60多涨至8000千多,还在涨,是因为生产者连接泄露吗?应该如何解决?

理论上kafka都是保持的长连接,不会有那么多的。
接下来,你就分析这8000多个连接,来自哪台机器呀,就可以定位到来自哪个ip,具体排查相应的业务了。

目前fix了,原因是k8s里某个service挂了,不停重启,该service启动会连接kafka,但不知道为什么service重启会累加连接,而不断开原来的连接

你的答案

查看kafka相关的其他问题或提一个您自己的问题