limits.conf文件修改注意事项

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决定
posted @ 2017-12-26 09:01  micmouse521  阅读(23707)  评论(0编辑  收藏  举报