linux 打开文件句柄数nofile设置不当,引起root用户登录“permission denied”错误

一、将/etc/security/limits.conf文件添加

*                -       nofile         6525000

后,造成root用户登录“permission denied”错误

二. 问题定位

由于正常登录被拒绝了,因此准备通过单用户模式去查看系统日志。在这之前,通过询问开发人员最近几次的操作,发现开发人员修改过nofile参数,并且修改为unlimited了。

启动linux时出现启动菜单时,按"e"键,然后修改第16行将"ro"修改为"rw init=/sysroot/bin/sh",按ctrl+x启动 进入单用户模式,并chroot /sysroot,查看/etc/security/limits.conf文件,果然nofilenproc被修改了,将nofile设置删除,保存,重启机器正常

三. 知识扩展

ulimit命令是用来设置shell启动进程所占用的资源限制的,而nofile是一个有限的值,并不是unlimited的。设置该值的时候不能超出nr_open定义的范围(在2.6.25内核之前nr_open定义为1024*1024)。 
nr_open是一个进程最多同时打开的文件句柄数量,默认nr_open的值为1048576,可以通过cat /proc/sys/fs/nr_open查看。

如果我们想要增大nofile的值,比如300万,则首先需要修改nr_open的值,通过直接sysctl -w fs.nr_open=或者直接写入sysctl.conf文件来修改nr_open的值,之后在增大nofile的值。

原文地址:https://www.cnblogs.com/sky-cheng/p/14035143.html