一、将/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
文件,果然nofile
和nproc
被修改了,将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
的值。