zoukankan      html  css  js  c++  java
  • LINUX中的limits.conf配置文件

    为何需要文件描述符?

    原因1 – 资源问题:节约内存资源。服务器上,每个打开的文件都需要消耗内存来管理。

    原因2 – 安全问题:如果不限制的话,如果发生情况为,启动一个进程只是无限的创建和打开新的文件,会让服务器崩溃。

    所以限制文件描述符的数量对于linux系统的稳定性是非常重要的。

    配置文件

    inux资源限制配置文件是/etc/security/limits.conf;
    限制用户进程的数量对于linux系统的稳定性非常重要。
    limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。

    除了 

    /etc/security/limits.conf

    /etc/security/limits.d/目录下,里面配置会覆盖/etc/security/limits.conf的配置

    可以限制的资源类型如下:

    所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。

    • 第一列表示用户和组(@开头)。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值

    • hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。

    • core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了

    #<domain>      <type>  <item>         <value>
    #
    
    #*               soft    core            0
    #root            hard    core            100000
    #*               hard    rss             10000
    #@student        hard    nproc           20
    #@faculty        soft    nproc           20
    #@faculty        hard    nproc           50
    #ftp             hard    nproc           0
    #ftp             -       chroot          /ftp
    #@student        -       maxlogins       4
    
    # End of file
    
    -----------分割线,上面是配置文件的模板,下面是自己添加的------------------------
    
    *                 soft     nofile         655350      #表示任何一个用户可以打开的最大的文件描述符数量
    *                 hard    nofile         655350
    
    *                 soft    nproc          655350      #表示任何一个用户可以打开的最大的进程数
    *                hard    nproc          655350
    
    
    @student        hard    nofile          65535       #student组中的任何人最多能打开文件描述符数量是65535,并且会在打开65000个时发出警告
    @student        soft    nofile          65000
    
    @student        hard    nproc           50            #student组中的任何人不能拥有超过50个进程,并且会在拥有30个进程时发出警告
    @student        soft    nproc           30

     系统级别设置

    1、查看系统最大文件描述符

    $ cat /proc/sys/fs/file-max
    186405

     2、设置系统最大文件描述符

    临时性设置

    $ echo 1000000 > /proc/sys/fs/file-max

    永久性设置

    在/etc/sysctl.conf中设置,应该设什么值是最佳实践?比如8G的内存,设为8192/2 * 256 = 524288

    fs.file-max = 1000000

    用户级别设置

    1、查看 ulimit命令,-n默认查看的是soft limit,这个值是从/etc/security/limits.conf文件的* soft nofile 655350来的

    $ ulimit -n
    170000

    查看hard limit

    $ ulimit -Hn
    170000

    2、设置

    临时性:

    通过ulimit -Sn设置最soft limit,注意soft limit必须小于hard limit

    $ ulimit -Sn 160000

    通过ulimit -Hn设置最Hard limit

    $ ulimit -Hn 160000

    同时设置soft limit和hard limit。对于非root用户只能设置比原来小的hard limit。

    $ ulimit -n 180000

    永久性:

    root权限下,在/etc/security/limits.conf中添加如下两行,*表示所有用户,重启生效

    * soft nofile 102400
    
    * hard nofile 104800

    注意:设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,注销后将无法正常登录。

    查看当前系统使用的打开文件描述符数

    $ cat /proc/sys/fs/file-nr 
    2176    0    2048000

    其中第一个数表示当前系统已分配使用的打开文件描述符数,第二个数为分配后已释放的(目前已不再使用),第三个数等于file-max。

    总结

    知道了/etc/security/limits.conf中的参数含义之后,那么如何配置nofile,确定nofile的最大值呢

    解答:使用ulimt -n命令进行测试,如果小于系统允许的最大值,设置成功,大于最大值,系统会报错提示。

    $ ulimit -n 1100000
    -bash: ulimit: open files: cannot modify limit: Operation not permitted
    $ ulimit -n 1048576
    $ ulimit -n 1048577
    -bash: ulimit: open files: cannot modify limit: Operation not permitted
    $ ulimit -n 1048575
    $ ulimit -n 1048576

    ulimit -a/n/H/S/u 都有什么含义

    ulimit -a 显示当前所有的资源限制
    ulimit -H 设置硬件资源限制
    ulimit -S 设置软件资源限制
    ulimit -n 设置进程最大打开文件描述符数
    ulimit -u <程序数目>  用户最多可开启的程序数目

    a. 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max

    b. 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
    c. nofile的soft limit不能超过其hard limit
    d. nofile的hard limit不能超过/proc/sys/fs/nr_open

    链接:https://www.jianshu.com/p/47336fcd22da


    参考:

    https://www.jianshu.com/p/47336fcd22da

    https://blog.csdn.net/fanren224/article/details/79971359

  • 相关阅读:
    Java 破解谷歌翻译api,可以实现程序自动化翻译文章
    如何搭建高可用redis架构?
    架构师带你玩转分布式锁
    Java8内存模型—永久代(PermGen)和元空间(Metaspace)
    【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南
    kafka为什么这么优秀!
    讲道理,为什么分布式一定要有Redis?
    Windows系统内存分析工具的介绍
    colspan width issue
    OpenGL ES3 非常好的系列文章
  • 原文地址:https://www.cnblogs.com/JiaoTou/p/13435288.html
Copyright © 2011-2022 走看看