系统资源限制
阐述:
linux 系统对各个资源的使用都是有限制的,如果要更改默认阈值,可通过命令(ulimit)临时生效或者配置文件(/etc/security/limits.conf和/etc/security/limits.d/目录下文件)永久生效两种方式。
limits.conf 配置说明(重启生效)
注意
限制资源使用的配置文件是 /etc/security/limits.conf,和/etc/security/limits.d/目录,/etc/security/limits.d/里面配置会覆盖/etc/security/limits.conf的配置
限制的资源类型:
所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、
单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
配置文件格式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#<domain> <type> <item> <value> #* soft core 0 #root hard core 100000 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #ftp - chroot /ftp #@student - maxlogins 4 -----------分割线,上面是配置文件的模板,下面是自己添加的------------------------ * soft nofile 655350 #表示任何一个用户可以打开的最大的文件描述符数量 * hard nofile 655350 * soft nproc 655350 #表示任何一个用户可以打开的最大的进程数 * hard nproc 655350 @student hard nofile 65535 #student组中的任何人最多能打开文件描述符数量是65535,并且会在打开65000个时发出警告 @student soft nofile 65000 @student hard nproc 50 #student组中的任何人不能拥有超过50个进程,并且会在拥有30个进程时发出警告 @student soft nproc 30
说明:
第一列表示用户和组(@开头)。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值
hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。
core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了
Tips:
针对某个用户进行限制还可以在用户的家目录的bashrc文件种配置ulimit 命令
ulimit 使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
常用命令 ulimit -a 查看所有资源限制 ulimit -n -n默认查看的是soft limit ulimit -Hn 查看hard limit ulimit -Sn 160000 设置最soft limit,注意soft limit必须小于hard limit ulimit -Hn 160000 通过ulimit -Hn设置最Hard limit
系统调优
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1)有些资源使用设置成无限制(unlimited): 数据段长度:ulimit -d unlimited 最大内存大小:ulimit -m unlimited 堆栈大小:ulimit -s unlimited CPU 时间:ulimit -t unlimited 虚拟内存:ulimit -v unlimited 上述只是暂时地,适用于通过 ulimit 命令登录 shell 会话期间。 永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件中, 即特定于 shell 的用户资源文件,如: 2) 解除 Linux 系统的最大进程数和最大文件打开数限制: vi /etc/security/limits.conf # 添加如下的行 * soft noproc 11000 * hard noproc 11000 * soft nofile 4100 * hard nofile 4100 说明:* 代表针对所有用户 noproc 是代表最大进程数 nofile 是代表最大文件打开数 3) 让 SSH 接受 Login 程式的登入,方便在 ssh 客户端查看 ulimit -a 资源限制: a、vi /etc/ssh/sshd_config 把 UserLogin 的值改为 yes,并把 # 注释去掉 b、重启 sshd 服务: /etc/init.d/sshd restart 4) 修改所有 linux 用户的环境变量文件: vi /etc/profile ulimit -u 10000 ulimit -n 4096 ulimit -d unlimited ulimit -m unlimited ulimit -s unlimited ulimit -t unlimited ulimit -v unlimited
文件描述符资源限制
文件描述符fd:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
文件描述符是linux内核为了高效管理已被打开的文件所创建的索引,所有的IO操作系统调用都是使用文件描述符。 每打开一个文件都会创建文件描述符,并将文件指针指向这个文件描述符,文件描述符由非负整数表示,系统默认的3个文件描述符是0,1,2,即标准输入、标准输出、标准错误输出。 此时打开一个文件即从3开始,写入到文件描述符表中。每个进程在PCB(Process Control Block)即进程控制块中都保存着一份文件描述符表。 能打开多少文件描述符?理论来说内存有多大就可以打开多少文件描述符,但内核进行管理 一般是内存的10%(系统限制)。 文件描述符限制是系统资源限制的一部分,调试也是通过Ulimit 或者limits.conf 两种方式。
查看
查看系统限制:
方法1.
[root@WebA-136 ~]# sysctl -a | grep fs.file-max
fs.file-max = 98622
方法2.
[root@WebA-136 ~]# cat /proc/sys/fs/file-max
98622
查看用户级别限制:
ulimit -n
修改
系统限制修改
临时修改
[root@WebA-136 ~]# sysctl -w fs.file-max=400000
fs.file-max = 400000
You have new mail in /var/spool/mail/root
[root@WebA-136 ~]# echo 350000 >/proc/sys/fs/file-max
[root@WebA-136 ~]# sysctl -a | grep fs.file-max
fs.file-max = 350000
[root@WebA-136 ~]#
永久修改
将fs.file-max=400000添加到/etc/sysctl.conf配置文件中。
用户级别修改(单个进程最大打开文件个数)
临时修改,重启失效
ulimit -SHn 10240#修改可以打开的文件描述符数量限制
永久修改,所有用户都生效。(将hard,soft写入文件中,此文件格式是#<domain>用户或@组名或* <type>限制类型hard soft <item>限制的资源名称 <value> 值)
vim /etc/security/limits.conf
永久修改,所有用户都生效。在/etc/security/limits.d/*.conf 中,系统会先读取这样的文件,此文件中的项目会覆盖/etc/security/limits.conf中的项目,建议将其内容注释。
永久修改,修改单一用户,写入用户环境变量中 .bash_profile 写入ulimit -SHn 10240.
echo "ulimit -SHn 10240" >>/root/.bash_profile,或者在应用程序的启动脚本写入ulimit -n 10240