暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Linux驯兽师 2021-09-07
1361

十几年前,硬件资源有限,为了保障服务器稳定地运行,使用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

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

    对于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驯兽师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论