1. 程式人生 > >Linux上檔案描述符數量限制

Linux上檔案描述符數量限制

轉載自:http://blog.csdn.net/wsscy2004/article/details/41895263

       在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。如傳輸控制協議 (TCP) 和使用者資料報協議 (UDP) 套接字等,系統在後臺都為該應用程式分配了一個檔案描述符,該檔案描述符提供了大量關於這個應用程式本身的資訊。
       在進行高併發TCP連線處理時,最高的併發數量都要受到系統對使用者單一程序同時可開啟的檔案描述符數量的限制(這是因為系統為每個TCP連線都要建立一個socket控制代碼,每個socket控制代碼同時也是一個檔案控制代碼)。可使用ulimit命令檢視系統允許當前使用者程序開啟的檔案數限制:
ulimit -n
       一般每個程序最多允許同時開啟1024個檔案,這1024個檔案中還得除去每個程序必然開啟的標準輸入,標準輸出,標準錯誤,伺服器監聽socket,程序間通訊的unix域socket等檔案,那麼剩下的可用於客戶端socket連線的檔案數就只有大概1024-10=1014個左右。也就是說預設情況下,基於Linux的通訊程式最多允許同時1014個TCP併發連線。
       對於想支援更高數量的TCP併發連線的通訊處理程式,就必須修改Linux對當前使用者的程序同時開啟的檔案描述符的數量限制。修改上述限制的最簡單的辦法就是使用ulimit命令:
ulimit –n 65535
       上述命令中設定了的單一程序允許開啟的最大檔案數,但只是臨時的,永久生效的方法需要修改/etc/security/limits.conf,在最後新增:
* soft nofile 605536
* hard nofile 605536