來自:程式設計無界(微訊號:qianshic),作者:假不理
檔案是Linux系統中的一切事物的存在形式,計算機中的資料和硬體都是透過檔案的形式進行管理,Linux的檔案主要有普通檔案、檔案夾、裝置檔案、連結檔案、管道檔案、套接字檔案(資料通訊的介面)等型別,Linux 中的各種事物比如像檔案、檔案夾、鍵盤、監視器、硬碟、可移動媒體裝置、印表機、數據機、虛擬終端等等都是定義在檔案系統空間下的位元組流。
因此在Linux系統上的web程式,在進行TCP連線時,系統為每個TCP連線建立一個socket控制代碼,而每個控制代碼也是一個檔案控制代碼,所以web程式對檔案的操作情況,是影響到伺服器效能的重要指標,像網站在高流量高併發的場景下出現”Too many open files“的異常就是因為開啟的檔案數超過限制,而程式中對資源(包括圖片、音影片資源)、網頁、以及介面的請求在Linux系統裡的表現為對檔案的訪問,如果開啟檔案數超出了系統限制(系統級和使用者級)的數量,就會拒絕接下來的檔案訪問
當前使用者級的檔案數限制,可以透過 ulimit -n 來檢視,如圖:
而系統級別的檔案數限制,則透過sysctl -a來檢視,如下圖:
一般系統最大檔案數會根據硬體資源計算出來的,如果強行需要修改最大開啟檔案數可以透過ulimit -n 10240來修改,當這種方式只對當前行程有效,如果需要永久有效則需要修改/etc/security/limits.conf(重啟系統生效),如下圖:
其中:
root :指定使用者,如對所有使用者,則寫 *
soft:軟限制
hard:硬體限制
nofile 是代表最大檔案開啟數
除此之外,下麵是一些開啟檔案數操作相關的指令,僅供參考:
1、檢視所有行程的檔案開啟數:
lsof |wc -l
2、檢視某個行程開啟的檔案數:
lsof -p pid |wc -l
3、檢視系統中各個行程分別開啟了多少控制代碼數:
lsof -n|awk ‘{print $2}’|sort|uniq -c|sort -nr|more
●編號622,輸入編號直達本文
●輸入m獲取文章目錄
運維
更多推薦《18個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。