CentOS最大檔案描述限制更改

來源:互聯網
上載者:User

標籤:

檔案描述是系統資源的一種。linux 對系統資源的管理是一個分層級的管理。

  系統級的管理:/proc/sys/fs/file-max中設定了系統最大能使用的檔案描述數。
    查看該值可以用如下方式:
      [[email protected]#panda ~]# cat /proc/sys/fs/file-max
      655351
      [[email protected]#panda ~]# sysctl fs.file-max
      fs.file-max = 655351
      [[email protected]#panda ~]#
    修改該值可以用如下方式:
      [[email protected]#panda ~]# echo 655300 > /proc/sys/fs/file-max
      [[email protected]#panda ~]# sysctl fs.file-max
      fs.file-max = 655300
      [[email protected]#panda ~]# sysctl -w fs.file-max=655350
      fs.file-max = 655350
      [[email protected]#panda ~]# sysctl fs.file-max
      fs.file-max = 655350
      [[email protected]#panda ~]#
    上面方式修改的值會立即生效但是機器重啟後又會失效。永久生效的修改可以用下面的方式:
      [[email protected]#panda etc]# echo fs.file-max=524288 >> /etc/sysctl.conf
      [[email protected]#panda etc]# sysctl fs.file-max
      fs.file-max = 655350
      [[email protected]#panda etc]# sysctl -p
      fs.file-max = 524288
      [[email protected]#panda etc]# sysctl fs.file-max
      fs.file-max = 524288
      [[email protected]#panda etc]#
    執行了sysctl -p 命令之後 sysctl.conf中的修改才能立即生效。
    還有一個問題是file-max最大能設定多大呢?當然你可以把它往大了設,但是同時開啟的檔案描述符越多,記憶體開銷就越大。那怎樣設定一個合理的上限呢?一個經驗演算法是 256個fd 需4M記憶體。例如8G記憶體,8*1024/4*256=524288。

  使用者級的管理:/etc/security/limit.conf 可以添加使用者使用資源的限制
    設定格式為:
      username|@groupname type resource limit
      username|@groupname:設定需要被限制的使用者名稱,組名前面加@和使用者名稱區別。也可以用萬用字元*來做所有使用者的限制。
      type:有 soft,hard 和 -,soft 指的是當前系統生效的設定值。hard 表明系統中所能設定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同時設定了 soft 和 hard 的值
      resource: 為資源類型有多種。 nofile為最大開啟檔案數。
      例如:* -  nofile 655350   將所有使用者的最大開啟檔案數的soft和hard都設為524287 
    對/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. 執行命令: sysctl -w fs.file-max 524288
  3. 執行命令: sysctl -p 
  4. 執行命令: echo  * soft nofile  524286 >> /etc/security/limit.conf
  5. 執行命令: echo  * hard nofile 524287 >> /etc/security/limit.conf
  5. 結束當前會話期
  6. 啟動新的會話
  7.啟動我們的服務
 

CentOS最大檔案描述限制更改

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.