@
symb0l ulimit 和 limits.conf 都不能按照百分比设置限制,或许你可以手动算一下。
能限制用户内存使用、线程数量和同时打开的文件数量。
①以下是 ulimit 使用帮助
# ulimit --help
ulimit: ulimit [-SHabcdefiklmnpqrstuvxPT] [限制]
修改 shell 资源限制。
在允许此类控制的系统上,提供对于 shell 及其创建的进程所可用的
资源的控制。
选项:
-S 使用软 (`soft') 资源限制
-H 使用硬 (`hard') 资源限制
-a 所有当前限制都被报告
-b 套接字缓存尺寸
-c 创建的核文件的最大尺寸
-d 一个进程的数据区的最大尺寸
-e 最高的调度优先级 (`nice')
-f 有 shell 及其子进程可以写的最大文件尺寸
-i 最多的可以挂起的信号数
-k 分配给此进程的最大 kqueue 数量
-l 一个进程可以锁定的最大内存尺寸
-m 最大的内存进驻尺寸
-n 最多的打开的文件描述符个数
-p 管道缓冲区尺寸
-q POSIX 信息队列的最大字节数
-r 实时调度的最大优先级
-s 最大栈尺寸
-t 最大的 CPU 时间,以秒为单位
-u 最大用户进程数
-v 虚拟内存尺寸
-x 最大的文件锁数量
-P 最大伪终端数量
-T 最大线程数量
并非所有选项在所有系统上可用。
如果提供了 LIMIT 变量,则它为指定资源的新的值;特别的 LIMIT 值为`soft'、`hard'和`unlimited',分别表示当前的软限制,硬限制和无限制。否则打印指定资源的当前限制值,不带选项则假定为 -f
取值都是 1024 字节为单位,除了 -t 以秒为单位,-p 以 512 字节递增,-u 为无范围的进程数量。
② /etc/security/limits.conf 使用帮助
命令如下:vim /etc/security/limits.conf
按以下格式写入
域 类型 项 值
ftp hard nproc 0
域---可以是:
- 用户名
- 具有组语法的组名称
- 通配符* ,用于默认条目
- 通配符% ,也可以与组语法一起使用
类型---可以具有两个值:
- 执行软限制
- 执行硬限制
项---可以是以下项之一:
- core - 限制核心文件大小 ( KB )
- data - 最大数据大小 ( KB )
- fsize - 最大文件化 ( KB )
- memlock - 最大锁定内存地址空间 ( KB )
- nofile - 打开文件描述符的最大数量
- rss - 最大驻留集大小 ( KB )
- stack - 最大堆栈大小 ( KB )
- cpu - 最大 CPU 时间(最小值)
- nproc - 最大工艺数
- as - 地址空间限制 ( KB )
- maxlogins - 此用户的最大登录数
- maxsyslogins - 系统上的最大登录数
- priority - 使用
- locks - 用户可以保留的文件锁的最大数量
- sigpending - 挂起信号的最大数量
- msgqueue - POSIX 消息队列使用的最大内存数(字节)
- nice - 最大好优先级允许提高到值: - 20,19
- rtprio - 最大实时优先级
如果你想设置某些进程的资源占用
建议使用修改 /etc/security/limits.conf 的方法
设置项目比较详细,且文件中有设置实例可以参照
但要注意一个问题,以上内容我并没有完全实践过,如果在修改设置后出现服务不正常的现象,请再次修改 /etc/security/limits.conf
直接将新加入的内容用#号注释,重新启动系统后可以使限制失效
例如:
#ftp hard nproc 0