一、什么是ulimit-n
ulimit是一個用于Linux系統進程控制的命令,允許管理員限制每個用戶進程可以擁有的資源。-n是ulimit命令的其中一個選項,用于設置每個用戶的文件描述符數量上限。
二、為什么需要ulimit-n永久生效
ulimit-n設置的文件描述符數量上限只對當前會話有效,當用戶重新登錄后,該設置會失效。如果希望這個設置得以永久保留,需要對配置文件進行修改。
三、修改配置文件
Linux系統中ulimit-n的配置文件通常為/etc/security/limits.conf。我們需要在該配置文件中添加以下內容:
* soft nofile 65536
* hard nofile 65536
其中,第一行表示將所有用戶的file descriptor數量上限(soft limit)設為65536,第二行表示將所有用戶的file descriptor數量上限(hard limit)也設為65536。這樣,所有用戶的文件描述符數量上限就被設置為了65536,可以根據實際情況進行修改。
四、重啟生效
修改配置文件后,需要重啟生效??梢酝ㄟ^執行以下命令來檢查配置是否生效:
$ ulimit -n
如果輸出結果為65536,則表示已成功使ulimit-n永久生效。
五、其他一些注意事項
1. 用戶限制
除了設置全局的文件描述符數量上限外,還可以為某個用戶或某個群組單獨設置文件描述符數量上限。
例如,要為用戶名為test的用戶設置文件描述符數量上限為2048,可以在limits.conf文件中添加以下內容:
test soft nofile 2048
test hard nofile 2048
這樣,test用戶的文件描述符數量上限就會被設置為2048。
2. ulimit-n參數
除了在配置文件中設置ulimit-n的值,還可以直接在命令行中使用ulimit命令設置ulimit-n的值,如:
$ ulimit -n 2048
這里將ulimit-n設置為了2048。
需要注意的是,通過ulimit命令設置的ulimit-n的值只在當前會話中有效,重啟后會失效。
3. /etc/security/limits.d/目錄
除了/etc/security/limits.conf之外,還有一個/etc/security/limits.d/目錄,該目錄下的配置文件也會被讀取。如果在limits.conf中設置的值和limits.d目錄下的配置文件存在沖突,則以后者為準。
4. 硬限制和軟限制
ulimit-n有兩個參數:硬(limit)限制和軟(soft)限制。軟限制指的是當前進程可以打開的文件描述符數量,硬限制則指的是最大可以設置的文件描述符數量上限。
當用戶嘗試將soft limit設置為大于hard limit的值時,只有擁有root權限的用戶才能修改。
5. 必要性分析
這里需要注意的是,將ulimit-n設置得過大會占用過多的系統資源。因此,需要根據實際情況進行設置,不能盲目地將其設置得過大。
需要給系統賦予足夠的并發連接數時,必須正確設置ulimit參數。如在Nginx、MySQL、Redis等網絡服務中,一個連接到服務的客戶端將占用一個文件描述符,同時每個進程還會自己使用一些文件描述符,因此需要為每個服務進程設置足夠的文件描述符數量上限。