天天看点

五分钟学习Linux资源限制命令—ulimit

十几年前,硬件资源有限,为了保障服务器稳定地运行,使用

ulimit

命令限制进程对资源的使用。但现在硬件性能已经大大提升,ulimit的默认值让服务器难以发挥最佳性能。例如,高负载的Web服务器、数据库服务器都需要对

可使用的文件描述符的最大数量

用户最大可用进程数

进行调整以发挥最佳性能。

ulimit命令选项及含义

参数名 对应选项 含义
-a 显示当前系统所有的limit资源信息,ulimit -a
core file size -c 内核core文件的大小限制,单位为blocks
file size -f 进程可以创建文件的最大值,单位为blocks
data seg size -d 进程最大数据段的大小,单位为KB
max memory size -m 进程可使用内存大小,单位为KB
open files -n 用户可使用的文件描述符的最大数量
stack size -s 最大堆栈大小,单位为KB
pipe size -p 管道缓冲区大小,单位为KB
max user processes -u 用户最大可用进程数
virtual memory -v 进程最大可用虚拟内存,单位为KB
cpu time -t 最大CPU占用时间,单位为秒
max locked memory -l 最大加锁内存大小,单位为KB

ulimit的多种使用方式

  1. 将命令加入用户环境变量中

    修改用户主目录下的

    .bashrc

    .bash_profile

    ,在其中加入

    ulimit -u 7154

    来限制用户最大可用进程数。
  2. 将命令加入启动应用程序的bash脚本中

    如在Tomcat启动脚本startup.sh中加入

    ulimit -n 65535

    来限制用户可以使用的文件描述符的最大数量。
  3. 在终端命令行执行ulimit命令

    直接在终端命令行执行ulimit进行资源限制仅在当前终端生效,不影响其他终端,且在关闭终端后,设置失效。

  4. 统一在

    /etc/security/limits.conf

    文件中配置,使用规则如下:
#格式:<domain> <type> <item> <value>              #domain:表示用户或组的名字,还可以使用*作为通配符,表示所有用户。              #type:表示限制类型,soft表示软资源限制,设置后可以超过软资源限制,但是不能超过硬资源限制;hard表示硬资源限制,一旦设置不能超过限制。              #item:表示需要限定的资源名称,常用的有nofile(用户可用文件描述符最大数量)、CPU(占用CPU时间)、statck(最大堆栈大小)、noproc(用户最大可用进程数)等。              #value:表示限制资源的具体值。              #举例:              * soft noproc 65535              * hard noproc 65535              * soft nofile 65535              * hard nofile 65535
           

ulimit使用注意事项

修改完配置文件后要退出SSH终端,重新登录会话才能生效。

除了

limits.conf

还有一个

/etc/security/limits.d

目录,系统会默认优先读取并使用这个目录下的配置文件,再读取

limits.conf

的配置,如果有重复的配置,以

/etc/security/limits.d

目录下的配置文件为准。

正在运行的应用不会读取新添加的ulimit资源限制,在应用重启后资源限制才生效。

ulimit修改

可使用文件描述符最大数量

不能超过1048576(1024*1024),如果要提高整个数量需要修改内核参数

/etc/sys/fs/nr_open

五分钟学习Linux资源限制命令—ulimit

limits.conf文件中的配置对systemctl启动的服务是不生效的。

五分钟学习Linux资源限制命令—ulimit

对于systemd管理的服务,全局配置需要修改

/etc/systemd/system.conf

/etc/systemd/user.conf

:

#在配置文件中添加如下内容,修改配置后,重启系统生效              DefaultLimitNOFILE=655360              DefaultLimitNPROC=655360
           

如果只修改单个服务的资源限制,以Nginx为例,需编辑

/usr/lib/systemd/system/nginx.service

#找到[Service段],添加如下配置              [Service]              LimitNOFILE=655360              LimitNPROC=655360              #运行如下命令,配置立即生效              systemctl daemon-reload              systemctl restart nginx.service
           

欢迎大家关注我,更多Linux干货等着你!

五分钟学习Linux资源限制命令—ulimit

继续阅读