系統的檔案控制代碼數問題

來源:互聯網
上載者:User

在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,畢竟開啟的檔案控制代碼數越多回應時間肯定會越慢。設定控制代碼計數後,系統重啟後,又會恢複預設值。如果想永久儲存下來,可以修改.bash_profile檔案,可以修改 /etc/profile 把上面命令加到最後。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.