前段时间去面试滴滴,面试官问了一些linux相关的问题,其中有一个关于ulimit问题,本人当时也没有给出很详细的回答,在此恶补一下。
ulimit简介
ulimit是bash内键命令,它具有一套参数集,用于 为由它生成的shell进程及其子进程的资源使用设置限制 。可以使用help ulimit查询手册
ulimit命令使用
ulimit的使用方式及作用范围
在用户的启动脚本里
应用程序的启动脚本中
直接控制台输入
ulimit作为对资源使用限制的一种工作,是有其作用范围的。那么,它限制的对象是单个用户,单个进程,还是整个系统呢?事实上,ulimit限制的是当前shell进程以及其派生的子进程
举例来说,如果用户同时运行了两个shell终端进程,只在其中一个环境中执行了ulimit -s 100,则该shell进程里创建文件的大小收到相应的限制,而同时另一个shell终端包括其上运行的子程序都不会受到其影响
ulimit相关配置文件
ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
选项含义例子
ulimit 作为对资源使用限制的一种工作,是有其作用范围的。那么,它限制的对象是单个用户,单个进程,还是整个系统呢?事实上,ulimit 限制的是当前 shell 进程以及其派生的子进程。举例来说,如果用户同时运行了两个 shell 终端进程,只在其中一个环境中执行了 ulimit -s 100,则该 shell 进程里创建文件的大小收到相应的限制,而同时另一个 shell 终端包括其上运行的子程序都不会受其影响
ulimit的主配置文件为/etc/security/limits.conf,配置文件目录为/etc/security/limits.d,后者定义的选项可以覆盖前者。
配置文件的语法
(1) domain 表示用户或者组的名字,还可以使用 * 作为通配符。
(2) Type 可以有两个值,soft 和 hard。
(3) Item 则表示需要限定的资源,可以有很多候选值,如 stack,cpu,nofile 等等,分别表示最大的堆栈大小,占用的 cpu 时间,以及打开的文件数。通过添加对应的一行描述,则可以产生相应的限制。
1)、解除 Linux 系统的最大进程数和最大文件打开数限制:
vi /etc/security/limits.conf
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
说明:* 代表针对所有用户
noproc 是代表最大进程数
nofile 是代表最大文件打开数
2)、让 SSH 接受 Login 程式的登入,方便在 ssh 客户端查看 ulimit -a 资源限制:
a、vi /etc/ssh/sshd_config
把 UserLogin 的值改为 yes,并把 # 注释去掉
b、重启 sshd 服务:
/etc/init.d/sshd restart
3)、修改所有 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)