一個進程可以打開最大文件句柄數設到多大才合適(Linux)

        在Linux下,咱們使用ulimit -n 命令能夠看到單個進程可以打開的最大文件句柄數量(socket鏈接也算在裏面)。通常默認值爲1024。

        對於通常的應用來講(象Apache、系統進程)1024徹底足夠使用。可是如何象squid、mysql、java等單進程處理大量請求的應用來講就有點捉襟見肘了。若是單個進程打開的文件句柄數量超過了系統定義的值,就會提到「too many files open」的錯誤提示。如何知道當前進程打開了多少個文件句柄呢?下面一段小腳本能夠幫你查看:java

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

 執行上述的腳本可能出現以下的結果: mysql

131 24204  
57  24244  
57  24231  
56  24264

其中,第一行是打開的文件句柄數量,第二行是進程號。獲得進程號後,咱們能夠經過ps命令獲得進程的詳細內容。sql

ps -aef|grep 24204  

mysql    24204 24162 99 16:15 ?        00:24:25 /usr/sbin/mysqld

哦,原來是mysql進程打開最多文件句柄數量。可是他目前只打開了131個文件句柄數量,遠遠底於系統默認值1024。shell

        可是若是系統併發特別大,尤爲是squid服務器,頗有可能會超過1024。這時候就必需要調整系統參數,以適應應用變化。Linux有硬性限制和軟性限制之分。能夠經過ulimit來設定這兩個參數。方法以下,以root用戶運行如下命令(某些系統不容許普通用戶修改ulimit的軟/硬限制):服務器

ulimit -HSn 4096

以上命令中,H指定了硬性大小,S指定了軟性大小,n表示設定單個進程最大的打開文件句柄數量。我的以爲最好不要超過4096,畢竟打開的文件句柄數越多響應時間確定會越慢。設定句柄數量後,系統重啓後,又會恢復默認值。若是想永久保存下來,在/etc/security/limits.conf文件中設置最大打開文件數併發

* hard nofile 2048
* soft nofile 2048

或者socket

* - nofile 2048

這行設置了每一個用戶的默認打開文件數爲2048。 注意"nofile"項有兩個可能的限制措施, 就是hard和soft。 要使修改過的最大打開文件數生效,必須對這兩種限制進行設定。 若是使用減號字符(-)設定定, 則hard和soft設定會同時被設定。重啓生效。ui

        硬限制代表soft限制中所能設定的最大值。 soft限制指的是當前系統生效的設置值。 hard限制值能夠被普通用戶下降, 可是不能增長。 soft限制不能設置的比hard限制更高。 只有root用戶纔可以增長hard限制值。code

        當增長文件限制描述,能夠簡單的把當前值雙倍。 例子以下, 若是你要提升默認值1024, 最好提升到2048, 若是還要繼續增長, 就須要設置成4096。進程

相關文章
相關標籤/搜索