Linux资源使用配置文件 /etc/security/limits.conf
这个文件主要是用来限制用户对系统资源的使用,具体的使用方法 man 5 limits.conf,里面便给出了详细的用法
user@db-2:~$ cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#
#
#Where:
# can be:
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
# can have the two values:
# - "soft" for enforcing the soft limits # 软限制,必须必硬限制的值要小
# - "hard" for enforcing hard limits # 硬限制
#
# can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files # 最大打开的文件数(以文件描叙符,file descripter计数)
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to
# - rtprio - max realtime priority
#
#
#
root soft nofile 200000 //针对ROOT用户
root hard nofile 200000
admin hard nofile 65536 //admin用户
admin soft nofile 65536
# End of file
每行的格式:
用户名/用户组 类型(硬限制、软限制) 选项 值
比如很多朋友可能在使用mysql的时候遇到two many open files的错误,此时便可以通过将运行mysqld的用户的 nofile(最大打开文件数)这个值增大一点,例如
db_running_user - nofile 设定一个合理的值
注意上面的第二列 ‘-’表示hard和soft,可以显示的为soft和hard写两行
我这只是举一个例子,这个文件还可以配置很多资源的使用,但是一般的情况下用默认的就行,当你有特殊需求或者自己对这些参数的来龙去脉又相当了解,你可以去改这些默认的参数,查看当前用户的这些资源使用限制情况可以使用 ulimit -a(查看ulimit的使用方法,用man ulimit无效,可以用help ulimit)
那么对它的修改什么时候生效呢?每次重新login的时候生效,至于原因则是我参考的那篇文章里面说了。
自己的的疑问:
1. 为什么要同时有soft和hard这两个限制?这个soft和hard应该是代表两种类型的阀值吧,一定不能超过hard限制,但是可以超过soft限制,有一个hard不就够了么?
从这里 知道设置两个参数的意义在于:hard是一个上限在运行期间不可以调大但可以调小,而soft只能比hard小,在运行期间可以调大。 我也用mysqld测试过,它读取的是soft值。soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错。
为何要修改ulimit
对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,
最好通过使用 ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024,有时候会遇上Socket/File: Can’t open so many files或too many open files的问题.
㈣怎么修改ulimit
1在/etc/rc.local中增加
ulimit -SHn 65535
2在/etc/profile中增加
ulimit -SHn 65535
然后source /etc/profile让参数即时生效
#在/etc/security/limits.conf 中增加
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
#说明:* 代表针对所有用户,nproc是代表最大进程数,nofile 是代表最大文件打开数.修改了limits.conf文件之后,要让它立即生效,只需关闭当前session,重新连接即可
注意:修改这里,普通用户 max user process值是不生效的,需要修改/etc/security/limits.d/20-nproc.conf文件中的值。
如果使用*号让全局用户生效是受文件/etc/security/limits.d/20-nproc.conf中nproc值大小制约的,而如果仅仅是针对某个用户,那么就不受该文件nproc值大小的影响。
修改 /etc/security/limits.d/20-nproc.conf
#因为普通用户受这个文件里的值影响修改为:
* soft nproc 65535
㈤、扩展阅读:
在Linux下面部署应用的时候,,其实Linux是有文件句柄限制的,而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量,因此我们需 要把这个值改大一些。
这里,有很多ulimit的文章都说的很含糊,究竟这个1024 是系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。
1、这个限制是针对单个程序的限制
2、这个限制不会改变之前已经运行了 的程序的限制
3、对这个值的修改,退出了当前的 shell就会消失
比如说,我先运行了一个程序A,然后 通过ulimit修改了限制为 2048,然后运行B,然后退出了shell再登录,然后运行C。那就只有B可以打开2048个句柄。
其中一个方法,是想ulimit修改命令放入/etc/profile 里面,但是这个做法并不好
正确的做法,应该是修改/etc /security/limits.conf
那系统总限制呢
其实是在这里,/proc/sys /fs/file-max
可以通过cat查看目前的 值,echo来立刻修改
另外还有一个,/proc/sys /fs/file-nr
只读,可以看到整个系统目前使用的文 件句柄数量
查找文件句柄问题的时候,还有一个很 实用的程序lsof
可以很方便看到某个进程开了那些句柄
也可以看到某个文件/目录被什么进程 占用了
如果你使用squid的话,你要在/etc/init.d/squid的文件加入ulimit -HSn 65535.另外,在squid.conf中也要加入max_filedesc 16384
注:上面这种方式只是改变了用户登陆系统后的文件打开数,对于/etc/init.d/nginxphp这种的启动脚本并不起作用,像这种启动脚本,需要在脚本内加一行:
ulimit -HSn 65535才行。
修改ulimit优化服务器
默认linux系统的文件描述符是1024,在大负载的情况下这点文件描述符是远远不够的,以下两种方法:
一,通过ulimit命令修改
#显示当前文件描述符
ulimit -n
#修改当前用户环境下的文件描述符为65536
ulimit -HSn 65536
只能修改当前登录用户环境下的文件描述符,如果此用户来另外打开一个连接,此链接环境的文件描述符依然是没改前的。如果系统重启,以前修改都不再生效
二,通过修改limits.conf文件
1.打开/etc/security/limits.conf,里面有很详细的注释,找到如下设置(如果没有就插入)
* soft nofile 65536
* hard nofile 65536
2.编辑/etc/pam.d/common-session,加入一行
session required pam_limits.so
3.编辑/etc/profile,加入
ulimit -SHn 65536
前言
使用环境:centos 7系统
一、查看用户打开的最大进程数
ulimit -a
max user processes (-u) #系统限制某用户下最多可以运行多少进程或线程
二、这些个值是怎么来的?
root 账号下 ulimit -u 出现的max user processes 的值默认是 # cat /proc/sys/kernel/threads-max的值/2,即系统线程数的一半
普通账号下 ulimit -u 出现的max user processes的值 默认是 /etc/security/limits.d/20-nproc.conf(centos6 是90-nproc.conf) 文件中的
三、怎么修改这个值
1.在/etc/security/limits.conf文件里添加如下内容:
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
注意:修改这里,普通用户 max user process值是不生效的,需要修改/etc/security/limits.d/20-nproc.conf文件中的值。
如果使用*号让全局用户生效是受文件/etc/security/limits.d/20-nproc.conf中nproc值大小制约的,而如果仅仅是针对某个用户,那么就不受该文件nproc值大小的影响。
2.修改 /etc/security/limits.d/20-nproc.conf
因为普通用户受这个文件里的值影响
修改为:
* soft nproc 65535
3.系统总限制
其实上面的 max user processes 65535 的值也只是表象,普通用户最大进程数无法达到65535 ,因为用户的max user processes的值,最后是受全局的kernel.pid_max的值限制。也就是说kernel.pid_max=1024 ,那么你用户的max user processes的值是127426 ,用户能打开的最大进程数还是1024。
修改这个值方法:
文章来源:
https://blog.csdn.net/zbszhangbosen/article/details/7469003
http://blog.51cto.com/goldstar52/1751935
https://www.cnblogs.com/pangguoping/p/5792075.html
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏