centos7 下lsof的坑
ES集群从centos6.7升级到centos7.2后,linux连接数告警了,进系统一看,lsof抓出来的结果达到了160多w,显示最大的一个进程,居然打开了100w+。无语了
使用lsof -p PID 发现才4000+。肯定有妖气
查了很久后,都没有结果
后来在想是不是lsof的版本不同造成的。对比了一下centos6.7和centos7.2的lsof版本
果然,版本不一样,查看版本区别
找到妖气了
然后呢,分别在centos6.7上安装和centos7.2上编译安装lsof 4.81 测试如下
centos 6.7下测试结果:
centos7.2下测试结果:
证实了问题
同一台server,运行不同版本的lsof 运行时间和得出的结果是不同的,究其原因是因为,新版本的lsof 默认打印TID(-K 参数),
更坑的是这个参数不可关闭。就是说-K 参数默认开启,还不能关闭,这个参数就是个摆设
最后在github上找到类似问题:
https://github.com/rapidoid/rapidoid/issues/105
解决方法(下面三种):
1、抓取进程连接数,使用lsof -p pid 或 ls /proc/$pid/fdinfo/ | grep '^[0-9]'| wc
2、抓取系统连接数,cat /proc/sys/fs/file-nr
3、lsof -ad^0 |wc