ulimit工具是性能调优的简单工具而且也是Linux内置的一个功能,它的目的是用于控制由Shell运行的进程所能使用的系统最大资源。其实在生产环境中部署Linux后通常都会用这个工具去调整一些参数来交付使用,当然这个过程往往都是自动完成的,工具使用很简单,但是它涉及的知识还是比较多的。
ulimit -a 查看所有限制,如果不加-H参数则默认显示软限制。
这里显示的是系统默认设置,我没有做任何调整。
ulimit用于限制shell启动进程所用的资源,内核文件大小、进程数据块大小、shell进程创建的文件大小、内存锁住大小、最大可用内存大小、最大可用虚拟内存大小、最大文件描述符大小、CPU时间、分配堆栈大小、单个用户的最大线程数量。它支持硬限制和软限制。
上面提到【限制shell】启动进程,其实这也就表明了它的作用范围,它不是用来限制系统的,仅仅是用来限制当前登录shell的用户所启动的进程的。临时调整参数的话仅对当前shell有效,关闭则失效,同时不影响其他shell;当然也可以永久生效这需要修改登录时shell读取的文件。
下面说一下参数含义:
参数 含义
-H 设置硬限制, ulimit -Hn 1024 表示硬限制,限制最大文件描述符为1024。硬限制是绝对不能超过这个值。
-S 设置软限制,ulimit -Sn 1024 表示软限制,限制最大文件描述符为1024,软限制不能大于硬限制,在不超过硬限制的前提下,可以超过软限制使用一段时间。超过该时间就自动清除。
-a 限制当前所有的限制信息,默认为软限制。
-c 最大的core文件大小,以blocks为单位。块大小取决于你系统分区使用的块为多大。
-d
进程占用的最大数据段大小,以bytes为单位
-f
进程可以创建的单个文件为多大,以blocks为单位。ulimit -f 100 限制进程最大可以创建100块大小的文件。
-i 可以被挂起或者阻塞的最大信号数量
-l 最大可加锁内存大小,以bytes为单位。这个值对普通用户生效,对管理员不起作用。不过有一个知识需要了解,就是为什么要对内存加锁?抛开虚拟地址空间不说,总之进程和数据都会在物理内存中,只要进程和数据当前都是活动的。不过我们也知道,内存管理有换进换出机制,采用最近最少原则,这些数据暂时性的交换到SWAP分区中,也就是虚拟内存中,而在需要的时候在交换进物理内存。内存加锁就是将数据锁定在物理内存中,避免换进换出。这样可以提高效率,对某些应用需要这样设置,比如数据库、或者对安全性要求高的,但大部分不需要。所以这个参数就是设定进程最大可以锁定多少内存。
-m 进程可用的最大内存数量,以bytes为单位。很多系统设置无效。
-n
进程可以打开的最大文件描述符数量,也就是一个进程可以最多打开多少个文件。
-p
管道缓冲区大小,以bytes为单位。
-q 限制程序使用POSIX消息队列的最大值
-r 限制程序的实时优先级范围,只针对普通用户有效。
-s
线程栈大小,以bytes为单位
-t
进程最多可以占用CPU多久,以秒为单位
-u
用户最大可运行的进程数,只针对普通用户有效。
-v
进程最多可用多少虚拟内存,以bytes为单位
如何使用:
-
临时使用,仅在当前shell中生效,退出失效,且不影响其他shell
-
永久针对某一用户生效
在某一用户的家目录中.bashrc文件中
修改/etc/security/limits.conf文件,不过推荐在/etc/security/limit.d下建立一个.conf的文件在这里写。这样便于管理。在limits.conf文件中有书写格式,参照该格式写就可以。通过第二种方式不但可以对用户还可以针对某一用户组的用户来设置。
作用范围:
上面已经提到过作用范围,这里再次强调一下ulimit的作用范围不是限制系统的,而是限制当前登录shell的用户以及他所启动的进程的。
比如同一个用户,登录了2个shell,在第一个shell中设置了ulimit -n 10,而另外一个保持默认,那么最大文件描述符为10这个限制仅对该用户登录的第一个shell生效。
ulimit是Linux系统中用于控制shell进程资源限制的工具,包括最大文件描述符、内存使用等。它分为硬限制和软限制,硬限制不可超过,软限制在一段时间内可超过。通过`-a`查看所有限制,`-H`和`-S`分别设置硬限制和软限制。设置限制可以在当前shell临时生效或通过修改`.bashrc`或`/etc/security/limits.conf`持久化。ulimit的作用范围仅限于当前shell及其启动的进程,对不同shell实例独立。了解并合理使用ulimit对于系统性能调优至关重要。

2691

被折叠的 条评论
为什么被折叠?



