Linux - 修改檔案控制程式碼數(Too many open files 異常)

襲冷發表於2018-02-28
一、相關說明

    在Linux系統中,遵循一切都是檔案的原則,即檔案、目錄、套接字、磁碟、管道等,都是以檔案被對待。在開啟這些資源的時候都會返回一個檔案描述符即檔案控制程式碼,用來標識該資源。

    Too many open files 的異常,可能是由於應用程式對資源的使用不當造成的,比如沒有及時關閉Socket或資料庫連線等;但也可能應用確實需要開啟比較多的檔案控制程式碼,而系統本身的設定限制了這一數量。

二、引數修改

    在linux系統中對程式可以呼叫的檔案控制程式碼數進行了限制,在預設情況下每個程式可以呼叫的最大控制程式碼數是1024個,如果超過了這個限制,程式將無法獲取新的控制程式碼。

    1、系統級 

        系統級設定對所有使用者有效,表示Linux核心分配的系統範圍內的最大的檔案控制程式碼數

        檢視方式: 
[root@xl ~]# cat /proc/sys/fs/file-max
        臨時修改:
# 修改 /proc/sys/fs/file-max 檔案的值,重啟後失效
[root@xl ~]# echo 1000000 > /proc/sys/fs/file-max 
        永久修改:  
# 修改 /etc/sysctl.conf檔案,配置fs.file-max屬性
fs.file-max = 6815755
# 配置完成後使用 sysctl -p 命令來通知系統啟用這項配置 
    2、使用者級

        Linux可以限制每個使用者的檔案控制程式碼數

        檢視方式:
# 檢視當前有效的控制程式碼數
[root@xl ~]# ulimit -n  
        臨時修改:
#臨時設定控制程式碼數只對當前的會話有效,終止時便結束限制 
[root@xl ~]# ulimit -HSn 65536 
        永久修改:
# 編輯 /etc/security/limits.conf 檔案,加入一下配置
* soft nofile 4096  
* hard nofile 4096  
# * 代表所有使用者,nofile 是代表最大檔案開啟數
    附、檢視當前程式佔用檔案描述符情況:
#檢視程式的所有檔案描述符 
[root@xl ~]# lsof -p pid




相關文章