1. 程式人生 > >檢視程序所佔fd數和修改系統配置的方法 .

檢視程序所佔fd數和修改系統配置的方法 .

在Linux下,我們使用ulimit -n 命令可以看到單個程序能夠開啟的最大檔案控制代碼數量(socket連線也算在裡面)。系統預設值1024。

對於一般的應用來說(象Apache、系統程序)1024完全足夠使用。但是如何象squid、mysql、java等單程序處理大量請求的應用來說就有點捉襟見肘了。如果單個程序開啟的檔案控制代碼數量超過了系統定義的值,就會提到“too many files open”的錯誤提示。如何知道當前程序打開了多少個檔案控制代碼呢?下面一段小指令碼可以幫你檢視:

lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more 

在系統訪問高峰時間以root使用者執行上面的指令碼,可能出現的結果如下:

lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more 
131 24204 
 57 24244 
 57 24231 
 56 24264 
其中第一行是開啟的檔案控制代碼數量,第二行是程序號。得到程序號後,我們可以通過ps命令得到程序的詳細內容。

ps -aef|grep 24204 
mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld 
哦,原來是mysql程序開啟最多檔案控制代碼數量。但是他目前只打開了131個檔案控制代碼數量,遠遠底於系統預設值1024。


但是如果系統併發特別大,尤其是squid伺服器,很有可能會超過1024。這時候就必須要調整系統引數,以適應應用變化。Linux有硬性限制和軟性限制。可以通過ulimit來設定這兩個引數。方法如下,以root使用者執行以下命令:

ulimit -HSn 4096 
以上命令中,H指定了硬性大小,S指定了軟性大小,n表示設定單個程序最大的開啟檔案控制代碼數量。個人覺得最好不要超過4096,畢竟開啟的檔案控制代碼數越多響應時間肯定會越慢。設定控制代碼數量後,系統重啟後,又會恢復預設值。如果想永久儲存下來,可以修改 /etc/profile 把上面命令加到最後.