CentOS最大文件描述符限制更改

原文:https://www.cnblogs.com/TonyXiaoClub/p/4747736.html

  系统级的限制:/proc/sys/fs/file-max中设定了系统最大能打开的文件数。 
    查看该值可以用如下方式: 
      [root@#panda ~]# cat /proc/sys/fs/file-max
      655351
      [root@#panda ~]# sysctl fs.file-max
      fs.file-max = 655351
      [root@#panda ~]# 
    修改该值可以用如下方式: 
      [root@#panda ~]# echo 655300 > /proc/sys/fs/file-max
      [root@#panda ~]# sysctl fs.file-max
      fs.file-max = 655300
      [root@#panda ~]# sysctl -w fs.file-max=655350
      fs.file-max = 655350
      [root@#panda ~]# sysctl fs.file-max
      fs.file-max = 655350
      [root@#panda ~]# 
    上面方式修改的值会立即生效但是机器重启后又会失效。永久生效的修改可以用下面的方式: 
      [root@#panda etc]# echo fs.file-max=524288 >> /etc/sysctl.conf
      [root@#panda etc]# sysctl fs.file-max
      fs.file-max = 655350
      [root@#panda etc]# sysctl -p
      fs.file-max = 524288
      [root@#panda etc]# sysctl fs.file-max
      fs.file-max = 524288
      [root@#panda etc]# 
    执行了sysctl -p 命令之后 sysctl.conf中的修改才能立即生效。 
    还有一个问题是file-max最大能设置多大呢?当然你可以把它往大了设,但是同时打开的文件描述符越多,内存开销就越大。那怎样设置一个合理的上限呢?一个经验算法是 256个fd 需4M内存。例如8G内存,8*1024/4*256=524288。

  用户级的限制:/etc/security/limits.conf 可以添加用户使用资源的限制 
    设置格式为: 
      username|@groupname type resource limit 
      username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。 
      type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同时设置了 soft 和 hard 的值 
      resource: 为资源类型有多种。 nofile为最大打开文件数。 
      例如:* -  nofile 655350   将所有用户的最大打开文件数的soft和hard都设为655350
    对/etc/security/limit.conf的修改会在新的会话期中生效

  会话级的限制:ulimit 命令查看和设置当前会话期的资源限制

    ulimit -Sn 查看会话期最大文件描述符soft限制 
    ulimit -Hn 查看会话期最大文件描述符hard限制,hard限制是soft的上限。 
    ulimit -Sn 2046 限制当前会话期内能打开的文件数为2046(如果其中一个进程打开了2046个,其他进程再打文件都将失败)。 
    ulimit -Sn 查看到的默认1024,用ulimit所做的修改在会话期结束后都将失效。那如何让对会话级的资源限制设置永久生效呢?可以把ulimit 命令放到会话建立时初始化的过程中执行,这样每次会话期就都自动执行命令修改设置了。例如在用户目录下的.bashrc 中加入一行 ulimit -Sn 2046,要对所有用户都生效则可在/etc/profile中加入一行命令 ulimit -Sn 2046。容易被忽略的一点是,如果我们设置了用户级的限制,新建的会话期的资源限制的初值(ulimit -Sn 查看到的)是从用户级的限制值(/etc/security/limit.conf中设置的值)继承过来的。

进程级的管理:进程可以调用getrlimit和setrlimit来设置和修改对应资源的限制。 
  例如:  
        rlimit tmp={4095,4096}; 
      setrlimit(RLIMIT_NOFILE,&tmp);    //设置进程打开文件数的软硬限制分别为4095,4096

总结:单个进程最大能使用的文件描述符是由系统限制,用户限制,会话期限制,进程限制值中最小的那个决定的。如果我们在一台机器上部署了自己的网络服务,我们只需按下面步骤修改就可以了: 
  1. 计算 fdmax = 物理内存大小(m为单位) / 4 * 256  假设内存为8G,fdmax=524288 
  2. 执行命令: echo fs.file-max=524288 >> /etc/sysctl.conf
  3. 执行命令: sysctl -p  
  4. 执行命令: echo  * soft nofile  524286 >> /etc/security/limits.conf 
  5. 执行命令: echo  * hard nofile 524287 >> /etc/security/limits.conf

调整方法2:

直接把ulimit SHn 524287 命令加入/etc/rc.local,用以设置每次开机启动时配置生效,命令如下。

cat>>/etc/rc.local/<<EOF

#-S use the 'soft' resource limit

#-H  use the 'hard' resource limit

#-n the maximum number of open file descriptors

ulimit -HSn  65535

#-s the maximum  stack size

ulimit  -s 65535

EOF

  5. 结束当前会话期
  6. 启动新的会话 
  7.启动我们的服务

(转)CentOS最大文件描述符限制更改的更多相关文章

  1. CentOS最大文件描述符限制更改

    系统级的限制:/proc/sys/fs/file-max中设定了系统最大能打开的文件数. 查看该值可以用如下方式: [root@#panda ~]# cat /proc/sys/fs/file-max ...

  2. Linxu系统修改文件描述符

    修改系统文件描述符 文件描述符:无符号整数(0-65535),进程使用它来标示打开的文件    /etc/security/limits.conf:可以修改CPU,堆栈,   1.查看最大的标示符 u ...

  3. Nginx-PHP优化设置 + lnmp调优的关键影响因素 + php-fpm + nginx返回码 + tcp调优 + 最大文件描述符

    https://www.cnblogs.com/zengkefu/p/5602473.html最大文件描述符 https://blog.csdn.net/fanren224/article/detai ...

  4. linux文件描述符数量的坑

    ulimit -n  查看 单进程或线程,可打开的最大文件描述符数 通过ulimit -n 10240 设置文件描述符数: (当前shell生效,这真是个坑啊) 永久生效:(需要重启系统,也是个坑,好 ...

  5. Linux文件描述符与打开文件之间的区别(转载)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239   1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为: ...

  6. linux文件描述符--转载

    转自:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录 ...

  7. Linux中的文件描述符与打开文件之间的关系

    Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...

  8. Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列

    http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...

  9. (转)Linux中的文件描述符

    本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为 ...

随机推荐

  1. TModJS:README

    ylbtech-TModJS:README 1.返回顶部 1. TmodJS 项目已经停止维护,请使用更好的代替方案:art-template-loader TmodJS(原名 atc)是一个简单易用 ...

  2. 关于jquery登录的一些简单验证。

    获取值之后的判断 $(function () { $("#btlogin").click(function () { var txtaccount = $("#txtac ...

  3. shell入门-变量

    shell变量分为系统变量和用户自定义变量 查看变量的命令 #env        系统变量 或者 #set    包括env和自定义变量和额外变量 使用变量的命令是 #echo $[变量] //// ...

  4. 大数据学习路线copy自淘宝

    一.hadoop视频学习(入门到精通) 二.数据挖掘(入门到精通) 三.Hadoop学习路线 1.开发前期准备 首先,如果你没有Java和Linux基础,建议你先简单学一下这两门课程,此宝贝里面都为你 ...

  5. 基于Docker部署私有npm

    NPM作为前端最cool及最烂的包管理器,它解决困扰前端工程化发展中代码模块管理的大问题.但是随着业务需求的发展,我们的代码从以前的单项目复用,延伸出了多项目复用的需求.本来项目之间代码复用管理的情景 ...

  6. 核PCA与PCA的精髓和核函数的映射实质

    1.PCA简介 遭遇维度危机的时候,进行特征选择有两种方法,即特征选择和特征抽取.特征选择即经过某种法则直接扔掉某些特征,特征抽取即利用映射的方法,将高维度的样本映射至低维度.PCA(或者K-L变换) ...

  7. [hdu1402]A * B Problem Plus(FFT模板题)

    解题关键:快速傅里叶变换fft练习. 关于结果多项式长度的确定,首先将短多项式扩展为长多项式,然后扩展为两倍. #include<cstdio> #include<cstring&g ...

  8. python 开发微信 自定义菜单

    1.再次重复说明,下面代码只是为了简单说明接口获取方式.实际中并不推荐,尤其是业务繁重的公众号,更需要中控服务器,统一的获取accessToken. vim basic.py #name: basic ...

  9. Java基础——深入剖析Java中的装箱和拆箱

    (转自:http://www.cnblogs.com/dolphin0520/p/3780005.html) 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若 ...

  10. iOS开发中,修改ASIHTTPRequest源码,禁止在POST时URL编码

    通过ASIHTTPRequest库进行POST时,会对POST的文本内容进行encodeURL,而且ASIHTTPRequest自身并没有配置项可以关闭这个转换. 本文提供一个方法关闭encodeUR ...