limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。
最近在测试环境部署hadoop集群和elastic集群,因此需要对limits.conf文件进行修改。
vim /etc/security/limits.conf * soft nofile 1048576 * hard nofile 1048576 * soft memlock -1 * hard memlock -1 * soft nproc -1 * hard nproc -1
出于好奇,发现内存和线程都可以设置为不限制。想偷懒把nofile也设置成不限制。错误配置如下:
vim /etc/security/limits.conf * soft nofile -1 * hard nofile -1 * soft memlock -1 * hard memlock -1 * soft nproc -1 * hard nproc -1
过了不久,开发的同事找我,有个测试集群不能远程了,发现就是我修改的这台设备。我自己试了下切换用户,报错如下:
# su - root could not open session
将配置文件修改为默认值后,可以远程登录。
所有,修改limits.conf这类限制资源使用的文件,一定要备份配置文件,并进行测试,最好能多开一个终端,在当前终端不可使用的时候,用来执行补救措施。
那么如何配置nofile,确定nofile的最大值呢。
个人经验是使用ulimt -n命令进行测试,如果小于系统允许的最大值,设置成功,大于最大值,系统会报错提示。
# ulimit -n 1100000 -bash: ulimit: open files: cannot modify limit: Operation not permitted # ulimit -n 1048576 # ulimit -n 1048577 -bash: ulimit: open files: cannot modify limit: Operation not permitted # ulimit -n 1048575 # ulimit -n 1048576
另外nofile的配置可以参考
http://jameswxx.iteye.com/blog/2096461
- /proc/sys/fs/file-max限制不了/etc/security/limits.conf
- 只有root用户才有权限修改/etc/security/limits.conf
- 对于非root用户, /etc/security/limits.conf会限制ulimit -n,但是限制不了root用户
- 对于非root用户,ulimit -n只能越设置越小,root用户则无限制
- 任何用户对ulimit -n的修改只在当前环境有效,退出后失效,重新登录新来后,ulimit -n由limits.conf决定
- 如果limits.conf没有做设定,则默认值是1024
- 当前环境的用户所有进程能打开的最大问价数量由ulimit -n决定