Linux文件进程占用的资源设置
文件标识符概念:
Linux系统中, 每当进程打开一个文件时,系统就为其分配一个唯一的整型文件描述符,用来标识该文件
配置文件:
/etc/security/limits.conf,和/etc/security/limits.d/目录
/etc/security/limits.conf,此文件设置通过PAM登录的用户的资源限制
/etc/security/limits.d/目录,默认存在一个*-nproc.conf文件,用于限制用户的线程限制,/etc/security/limits.d/里面配置会覆盖/etc/security/limits.conf的配置,如在/etc/security/limits.conf上有针对某一个用户的配置时,
/etc/security/limits.d目录下的配置文件也有该用户的配置,最终会取决于/etc/security/limits.d目录下的配置文件
限制的资源类型:
内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存,支持硬资源和软资源的限制。
配置设置:
每行以以下形式描述对用户的限制:
<domain> <type> <item> <value>
<domain>可以是:
-用户名
-组名,使用@group语法
-通配符*,用于默认输入
-通配符%,也可以与%group语法一起使用,用于maxlogin限制
<type>可以具有两个值:
- soft ## 用于软限制
- hard ## 用于硬限制
注:
什么是硬限制和软限制:
硬限制是可以在任何时候任何进程中设置 但硬限制只能由超级用户提起
软限制是内核实际执行的限制,任何进程都可以将软限制设置为任意小于等于对进程限制的硬限制的值
硬限制和软限制区别:
1.软限制起实际限制作用,但不能超过而硬限制(除非有root权限)。
2.普通用专户可以在硬限制范围属内,更改自己的软限制
3.普通用户都可以缩小硬限制,但不能扩大硬限制。而root缩小扩大都可以。
<item>可以是以下之一:
- core ##限制核心文件大小(KB)
- data ##最大数据大小(KB)
- fsize ##fsize-最大文件大小(KB)
- memlock ##最大内存锁地址空间(KB)
- nofile ##打开文件描述符的最大数量
- rss ##最大持久设置大小(KB)
- stack ##最大堆栈大小(KB)
- cpu ##最大CPU时间(MIN)
- nproc ##最大进程数
- as ##地址空间限制(KB)
- maxlogins ##该用户的最大登录数
- maxsyslogins ##系统上的最大登录数
- priority ##运行用户进程的优先级
- locks ##用户可以持有的最大文件锁数
- sigpending ##未决信号的最大数量
- msgqueue ##POSIX消息队列使用的最大内存(字节)
- nice ##允许将max nice优先级提高到以下值:[-20、19]
- rtprio ##最大实时优先级
例子设置:
* soft nproc 65535 ###任何用户打开文件描述符的最大数量限制数为65536(软限制)
root soft nproc unlimited ###root用户对打开文件描述符的最大数量限制数为不受限(软限制)
注:修改完配置文件后,需要重启才可以生效
临时设置ulimit命令:
ulimit
-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。
例子:
ulimit -n 65535 ##设置同一时间最多可开启的文件数为65535
使用ulimit -a 验证看下