云平台上物理机失联,重连物理机报错too many open file相关,同时查看物理机操作系统日志可看到"VFS: file-max limit 65535 reached"或者"too many open file"的报错信息。
云平台环境:ZStack 3.10.26
存储环境:Ceph
云主机操作系统:CentOS7.6
网络环境:公有网络
在Linux系统中遵循的是一切皆文件的原则,即任何的磁盘文件、进程、系统、网络、服务等等都是文件,系统内打开文件的时候就会返回一个fd,这个就是一个文件句柄。通过报错信息可得知是操作系统的文件句柄超出了系统默认配置上限,需要根据实际情况分析占据句柄交过的进程是否正常,或者增大操作系统内的默认文件句柄上限值。
1. 查看当前操作系统内默认文件句柄数是多少,可以使用ulimit -n进行查看,linux系统root用户ulimit值默认65536,普通用户的ulimit值默认是1024;
2. 使用命令lsof -p 进程id可以查看单个进程所有打开的文件详情,使用命令lsof -p 进程id | wc -l可以统计进程打开了多少文件;
3. 如果都没看出有异常的进程占用过多的文件数,可以尝试将操作系统内的默认句柄数量给调整大一些,可以使用ulimit -n 262144 临时生效,设置句柄上限为262144;
4. 永久生效请修改/etc/security/limits.conf,添加如下内容;
* soft nofile 262144
* hard nofile 262144
* soft nproc 10240
* hard nproc 10240
5. 退出当前终端,然后再ssh登录后可以使用ulimit -n查看已生效当前设置的值;
6. 系统自动重连物理机后连接状态为已连接,环境恢复正常使用;
7. 云平台新版本默认已经将环境内物理机句柄数调整到262144,如果环境版本过低,建议升级云平台版本至最新稳定版本使用。