今天发现服务器所有服务都不能正常访问处理
查看/var/log/message时发现
Nov 29 00:51:02 localhost kernel: VFS: file-max limit 65535 reached
1,查看linux内核下打开进程级文件句柄数量参数以及更改参数:
ulimit -n
65535
这个值明显是正常,如果有人没改过内核参数,更改办法如下:
临时解决办法:
ulimit -n 65535
永久解决办法:
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
重新载入内核参数:
sysctl -p
然后重新登录终端即可
当然这个值也可以设置更大。
2,查看系统级级文件句柄数量file-max。
这个文件是要设置/etc/sysctl.conf 配置文件,参数一般如下:
fs.file-max = 65535
已经设置65535,系统也有可能报错。这个就要查具体报错了。
我们可以通过如下命令观察文件句柄数量打开情况:
watch -n 1 cat /proc/sys/fs/file-nr
正常情况应该是:
我们出现了下面不正常情况,基本服务器的各个服务器都挂了或者不能正常使用,肯定是某个服务把他打开资源占用完毕了。 我们可以通过如下命令查看大体情况:
lsof -n|awk ‘{print $2}’|sort|uniq -c|sort -nr|more
结果如下:
说明:第一列是打开文件句柄数,第二列是PID
可以根据pid查看相似的进程大概是哪些,pid值都相近的。然后找到其中一个pid,cd /proc/pid查看是打开的哪个应用,这样就方便我们定位问题了 。
比如我这里就是的问题是一个大数据项目,处理办法就是如下:
kill -9 3749
将其杀掉以后。重启线上服务恢复正常。