问题描述:
最近cluster里有台机器挂了报too many open files
, 以前遇到过,改配置,改成ulimit -n 10000000
,重启kafka,还是不行,lsof | wc -l
从平常的80000多涨到挂掉(ulimit -a 看open files已经改到1000万,然后无意中看到磁盘快满了,还剩2G左右,因为kafka起不来,就直接删/logs
底下超过一天的文件,然后再起,目前还没挂。
问题:
- 是因为磁盘满了的原因吗?
- 观察其他环境的open files,都是20w左右的,唯独这台,即使work了,也是300多w,而且
ulimit -a
显示是配置的204800
,这是什么情况。。
感谢大佬回复。
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重启会累加连接,而不断开原来的连接
你的答案