使用ulimit查看和修改系统资源的限制

ulimit命令是一个系统内置的命令,也是内核调优的常用命令之一。主要的作用为查看系统资源的使用情况和修改限制进程或用户等对系统资源的额度分配的命令。

下面是在linuxMint下面用man ulimit查看ulimit命令可以看到ulimit命令的级别是3,属于程序库的函数。而ulimit --help得到的内容如下:

ulimit帮助

使用ulimit -a可以查看当前用户所有的系统资源限制。

ulimit资源限制

下面是这些参数的简易说明:

  • core file size : core文件的最大值为100 blocks,单位为块(block)
  • data seg size : 进程的数据段,可以任意大,单位为kb
  • scheduling priority : 调度优先级
  • file size : 文件大小,可以任意大,单位为块(block)
  • pending signals : 待处理的信号
  • max locked memory : 一个任务锁住的物理内存最大值,单位为kb
  • max memory size : 一个任务的常住物理内存的最大值,默认为无限制,可以限制,单位为kb
  • open files : 一个任务最多可以打开多少个文件
  • pipe size : 管道的最大空间,512字节乘以后面的数
  • POSIX message queues : POSIX的消息队列的最大值,单位为kb
  • real-time priority : real-timediaodu优先级
  • stack size : 进程的内存栈最大值,单位为kb
  • cpu time : 进程使用的CPU时间
  • max user processes : 当前用户可以同时打开的进程(含线程)的数量
  • virtual memory : 进程的最大地址空间
  • file locks : 能锁住的文件最大个数

临时修改ulimit

临时修改ulimit通过ulimit 参数 [限制数]的形式来进行限制修改。这里面的[限制数]表示调整后的限制数值,临时修改的限制只对当前的shell有效,S表示软限制;H表示硬限制;如果不指明,则表示软硬皆设置;

例:使用ulimit -n查看服务器默认最大文件打开数,可以看到,系统默认之后1024,这个值对于生产环境的服务器来说是太小的,因此通常在服务器调优的环节都会把这个值调高。通过ulimit -n 65535可以将最大文件打开数调整为65535.

ulimit -n # 查看当前的最大文件打开数
1024 
ulimit -n 65535 # 将最大文件打开数修改为65535
ulimit -n # 查看修改后的最大文件打开数
65535

整体的运行过程和结果如下图

ulimit修改文件打开数

以上的操作就完成了修改最大文件打开数。但是这个操作在系统重启后就会消失,需要重新再配置一次。

永久生效ulimit

上面提到的修改方法,不是永久的,在系统重启后,就失效需要重新配置,所以称之为临时修改,如果需要永久生效则可以修改limits.conf文件,limits.conf在目录/etc/security下面,下面的配置例子是最常用的几个服务器限制的调优,主要是最大文件限制和用户进程数的调优例子。nofile指向最大文件打开数,nproc指向用户最大进程数。内容如下:

nano /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

接下来需要说明/etc/security/limits.conf文件里面的配置格式:

<domain> <type> <item> <value>

domain是指生效的实体单位,可以是具体某个用户的用户名;也可以是通过@用户组名来指定整个用户组的用户;甚至可以是通配符*来代表所有用户。

type指向限制的类型:soft代表软限制;hard代表硬限制。

item是限制的资源,对应关系如下: - core同ulimit -c - data同ulimit -d - fsize同ulimit -f - memloc同ulimit -l - nofile同ulimit -n - stack同ulimit -s - cpu 同ulimit -t - nproc同ulimit -u - maxlogins指定用户可以同时登陆的数量 - maxsyslogins系统可以同时登陆的用户数 - priority用户进程运行的优先级 - locks用户可以锁定的文件最大值 - sigpengding同ulimit -i - msgqueue同ulimit -q