Linux最大開啟檔案數

1. 概述

1.1 問題描述

Linux 伺服器中部署帆軟應用時,出現報錯開啟的檔案過多或者too many open files,如下圖所示:

1.2 原因分析

Linux 系統本身預設系統應用最大開啟的檔案數為 1024,BI 執行時會讀取儲存在本地的資料,有些情況 BI 開啟的檔案數會超過這個限制,因此需要手動改掉linux系統的最大開啟檔案數。該修改在不同情況下會涉及到3個關鍵值。 

2. 參數說明

2.1 參數介紹

參數
說明預設值
nofile

單個進程的最大開啟檔案數

1024
nr_open

單個進程可分配的最大檔案數

1024*1024=1048576
file-max

系統核心一共可以開啟的最大值

185745

2.2 修改策略

一般情況下,nofile 的值不允許超過 nr_open 和 file-max 的值。因此在修改 nofile 時要考慮是否超過以上兩個值的情況:

  • 當要修改的「nofile」值未超過「nr_open」和「file-max」兩個值時,直接修改「nofile」值即可。

  • 當要修改的「nofile」值超過「nr_open」和「file-max」兩個值時,不僅要修改「nofile」的值,還要修改「nr_open」和「file-max」的值滿足「大於nofile」值。

2.3 查看參數大小

基於修改策略,請在執行下文的修改操作前,先查看各個參數的大小。

參數
查詢語句
nofileulimit -n
nr_opencat /proc/sys/fs/nr_open
file-max

cat /proc/sys/fs/file-max


3. 修改 nofile 值

當要修改的「nofile」值(最大開啟檔案數)未超過「nr_open」和「file-max」兩個值時,直接修改「nofile」值即可。

3.1 臨時生效

輸入ulimit -n 128000,如下圖所示:

3.2 永久生效

注:參考3.1節步驟一後,直接執行 reboot 重啟伺服器,即可生效;若不想重啟伺服器,可參考本節完整步驟(但需要重啟工程)。

1)使用vi /etc/security/limits.conf編輯 limits.conf 檔案,修改 nofile 值(其中 128000 即為修改的 nofile 值),如下所示:

vi /etc/security/limits.conf  #進入檔案編輯介面
* soft nofile 128000 #確定有該行內容
* hard nofile 128000  #確定有該行內容

注:有的系統需把「*」更換為具體帳號才生效,例如root soft nofile 128000

2)編輯/etc/pam.d/login檔案,確定有下面內容,如下圖所示:

session required pam_limits.so

3)
配置完成後,終端使用者重新登入,並重啟Tomcat工程,配置方可生效。
如下圖所示:

4. nr_open 和 file-max 值

4.1 臨時生效

echo 1200000 > /proc/sys/fs/nr_open
echo 200000 > /proc/sys/fs/file-max

4.2 永久生效:需要重啟伺服器

當要修改的最大開啟檔案數超過 nr_open 和 file-max 時,就需要改動該值,將該值提高。其修改方式如下:

在檔案/proc/sys/fs/nr_open
中加入如下程式碼:(1200000 為修改的參數值)

fs.nr_open=1200000

在檔案 /proc/sys/fs/file-max 中插入如下程式碼:

fs.file-max=200000

儲存並執行 reboot 重啟伺服器。

注:Linux的核心參數 nr_open 只有在核心版本是 2.6.25 之後的版本才可設定。查看核心版本使用命令“uname -a”。

然後再修改 nofile 值 ,請參見 3.2 節。

4.3 永久生效:無需重啟伺服器

/etc/sysctl.conf中設定fs.nr_open= 1200000 fs.file-max=200000,然後執行sysctl -p,使配置生效。如下所示:

4.4 效果查看

透過cat /proc/pid/limits查看單進程最大開啟檔案數,如下圖所示:

5. 注意事項

5.1 nofile修改不生效

問題描述

參考文檔第三章修改nofile值不生效,仍為之前的值。

原因及解決方案

檢查/etc/profile檔案中,是否存在 ulimit -n xxx相關語句,刪除即可

5.1 普通使用者修改未生效

問題描述

參考本文 4.3 節無需重啟伺服器的步驟後,普通使用者修改未生效,使用 ssh 連結 Linux 報錯:ulimit: open files: cannot modify limit: Operation not permitted

原因分析

該問題發生在 openssh 升級之後,且只有 ssh 登入才發生此問題,與 ssh 有關。

解決方案

1)修改sshd_config檔案,將#UseLogin no修改為UseLogin yes,如下所示:

vi  /etc/ssh/sshd_config

2)使用service sshd restart重啟 ssh 服務。

附件列表


主题: 擴展閱讀
已经是第一篇
已经是最后一篇
  • 有帮助
  • 没帮助
  • 只是浏览
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙