zoukankan      html  css  js  c++  java
  • 系统资源限制 / 文件描述符配置

    系统资源限制

    阐述:

    linux 系统对各个资源的使用都是有限制的,如果要更改默认阈值,可通过命令(ulimit)临时生效或者配置文件(/etc/security/limits.conf和/etc/security/limits.d/目录下文件)永久生效两种方式。

    limits.conf 配置说明(重启生效)

    注意

    限制资源使用的配置文件是 /etc/security/limits.conf,和/etc/security/limits.d/目录,/etc/security/limits.d/里面配置会覆盖/etc/security/limits.conf的配置

    限制的资源类型:

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

    配置文件格式

    #<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
    -----------分割线,上面是配置文件的模板,下面是自己添加的------------------------
    * 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
    View Code

    说明:
    第一列表示用户和组(@开头)。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值
    hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。
    core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了

    Tips:
    针对某个用户进行限制还可以在用户的家目录的bashrc文件种配置ulimit 命令

    ulimit 使用

    常用命令
    ulimit -a 查看所有资源限制
    ulimit -n    -n默认查看的是soft limit
    ulimit -Hn    查看hard limit
    ulimit -Sn 160000    设置最soft limit,注意soft limit必须小于hard limit
    ulimit -Hn 160000    通过ulimit -Hn设置最Hard limit
    View Code


    系统调优

    1)有些资源使用设置成无限制(unlimited): 
    数据段长度:ulimit -d unlimited 
    最大内存大小:ulimit -m unlimited 
    堆栈大小:ulimit -s unlimited 
    CPU 时间:ulimit -t unlimited 
    虚拟内存:ulimit -v unlimited 
      
    上述只是暂时地,适用于通过 ulimit 命令登录 shell 会话期间。
    永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件中, 即特定于 shell 的用户资源文件,如:
    
    2) 解除 Linux 系统的最大进程数和最大文件打开数限制:
    vi /etc/security/limits.conf
    # 添加如下的行
    * soft noproc 11000
    * hard noproc 11000
    * soft nofile 4100
    * hard nofile 4100 
    说明:* 代表针对所有用户
    noproc 是代表最大进程数
    nofile 是代表最大文件打开数 
    
    3) 让 SSH 接受 Login 程式的登入,方便在 ssh 客户端查看 ulimit -a 资源限制:
    a、vi /etc/ssh/sshd_config 
    把 UserLogin 的值改为 yes,并把 # 注释去掉
    b、重启 sshd 服务:
    /etc/init.d/sshd restart
    
    4) 修改所有 linux 用户的环境变量文件:
    vi /etc/profile 
    ulimit -u 10000
    ulimit -n 4096
    ulimit -d unlimited 
    ulimit -m unlimited 
    ulimit -s unlimited 
    ulimit -t unlimited 
    ulimit -v unlimited
    View Code

    文件描述符资源限制

    文件描述符fd:

    文件描述符是linux内核为了高效管理已被打开的文件所创建的索引,所有的IO操作系统调用都是使用文件描述符。
    每打开一个文件都会创建文件描述符,并将文件指针指向这个文件描述符,文件描述符由非负整数表示,系统默认的3个文件描述符是0,1,2,即标准输入、标准输出、标准错误输出。
    此时打开一个文件即从3开始,写入到文件描述符表中。每个进程在PCB(Process Control Block)即进程控制块中都保存着一份文件描述符表。
    能打开多少文件描述符?理论来说内存有多大就可以打开多少文件描述符,但内核进行管理 一般是内存的10%(系统限制)。
    文件描述符限制是系统资源限制的一部分,调试也是通过Ulimit 或者limits.conf 两种方式。
    View Code

    查看

    查看系统限制:
    方法1.
    [root@WebA-136 ~]# sysctl -a | grep fs.file-max
    fs.file-max = 98622
    方法2.
    [root@WebA-136 ~]# cat /proc/sys/fs/file-max
    98622
    查看用户级别限制:
    ulimit -n


    修改

    系统限制修改
    临时修改
    [root@WebA-136 ~]# sysctl -w fs.file-max=400000
    fs.file-max = 400000
    You have new mail in /var/spool/mail/root
    [root@WebA-136 ~]# echo 350000 >/proc/sys/fs/file-max
    [root@WebA-136 ~]# sysctl -a | grep fs.file-max
    fs.file-max = 350000
    [root@WebA-136 ~]#
    永久修改
    将fs.file-max=400000添加到/etc/sysctl.conf配置文件中。

    用户级别修改(单个进程最大打开文件个数)
    临时修改,重启失效
    ulimit -SHn 10240#修改可以打开的文件描述符数量限制

    永久修改,所有用户都生效。(将hard,soft写入文件中,此文件格式是#<domain>用户或@组名或* <type>限制类型hard soft <item>限制的资源名称 <value> 值)
    vim /etc/security/limits.conf
    永久修改,所有用户都生效。在/etc/security/limits.d/*.conf 中,系统会先读取这样的文件,此文件中的项目会覆盖/etc/security/limits.conf中的项目,建议将其内容注释。
    永久修改,修改单一用户,写入用户环境变量中 .bash_profile 写入ulimit -SHn 10240.
    echo "ulimit -SHn 10240" >>/root/.bash_profile,或者在应用程序的启动脚本写入ulimit -n 10240

  • 相关阅读:
    绑定方法与与绑定方法
    组合 多态 封装
    继承
    面向对象
    函数进阶
    文件操作
    字符编码
    python基本数据类型及操作
    IDEA 错误: 找不到符号
    Spring+MVC Controller层接收App端请求的中文参数乱码问题。
  • 原文地址:https://www.cnblogs.com/fanggege/p/11323950.html
Copyright © 2011-2022 走看看