Too many open files 問題的解決

來源:互聯網
上載者:User

Too many open files經常在使用linux的時候出現,大多數情況是您的程式沒有正常關閉一些資源引起的,所以出現這種情況,請檢查io讀寫,socket通訊等是否正常關閉。

如果檢查程式沒有問題,那就有可能是linux預設的open files值太小,不能滿足當前程式預設值的要求,比如資料庫連接池的個數,tomcat請求串連的個數等。。。

查看當前系統open files的預設值,可執行:

Java代碼
 
  1. [root@pororo script]# ulimit -a   
  2. core file size          (blocks, -c) 0  
  3. data seg size           (kbytes, -d) unlimited   
  4. scheduling priority             (-e) 0  
  5. file size               (blocks, -f) unlimited   
  6. pending signals                 (-i) 128161  
  7. max locked memory       (kbytes, -l) 32  
  8. max memory size         (kbytes, -m) unlimited   
  9. open files                      (-n) 800000  
  10. pipe size            (512 bytes, -p) 8  
  11. POSIX message queues     (bytes, -q) 819200  
  12. real-time priority              (-r) 0  
  13. stack size              (kbytes, -s) 10240  
  14. cpu time               (seconds, -t) unlimited   
  15. max user processes              (-u) 128161  
  16. virtual memory          (kbytes, -v) unlimited   
  17. file locks                      (-x) unlimited  
[root@pororo script]# ulimit -acore file size          (blocks, -c) 0data seg size           (kbytes, -d) unlimitedscheduling priority             (-e) 0file size               (blocks, -f) unlimitedpending signals                 (-i) 128161max locked memory       (kbytes, -l) 32max memory size         (kbytes, -m) unlimitedopen files                      (-n) 800000pipe size            (512 bytes, -p) 8POSIX message queues     (bytes, -q) 819200real-time priority              (-r) 0stack size              (kbytes, -s) 10240cpu time               (seconds, -t) unlimitedmax user processes              (-u) 128161virtual memory          (kbytes, -v) unlimitedfile locks                      (-x) unlimited

如果發現open files項比較小,可以按如下方式更改:

1. 檢查/proc/sys/fs/file-max檔案來確認最大開啟檔案數已經被正確設定。

Java代碼
 
  1. # cat /proc/sys/fs/file-max  
 # cat /proc/sys/fs/file-max

如果設定值太小,修改檔案/etc/sysctl.conf的變數到合適的值。這樣會在每次重啟之後生效。 如果設定值夠大,跳過這一步。

Java代碼
 
  1. # echo 2048 > /proc/sys/fs/file-max  
# echo 2048 > /proc/sys/fs/file-max

編輯檔案/etc/sysctl.conf,插入下行:

Java代碼
 
  1. fs.file-max = 8192  
fs.file-max = 8192

2. 在/etc/security/limits.conf檔案中設定最大開啟檔案數, 下面是一行提示:

Java代碼
 
  1. #<domain>  <type>  <item>  <value>  
#<domain>  <type>  <item>  <value>

添加如下這行:

Java代碼
 
  1. * - nofile 8192  
* - nofile 8192

這行設定了每個使用者的預設開啟檔案數為2048。 注意"nofile"項有兩個可能的限制措施。就是<type>項下的hard和soft。 要使修改過得最大開啟檔案數生效,必須對這兩種限制進行設定。 如果使用"-"字元設定<type>, 則hard和soft設定會同時被設定。

硬限制表明soft限制中所能設定的最大值。 soft限制指的是當前系統生效的設定值。 hard限制值可以被普通使用者降低。但是不能增加。 soft限制不能設定的比hard限制更高。 只有root使用者才能夠增加hard限制值。

當增加檔案限制描述,可以簡單的把當前值雙倍。 例子如下, 如果你要提高預設值1024, 最好提高到2048, 如果還要繼續增加, 就需要設定成4096。

最後用ulimit -a再次查看,open files的值,沒什麼問題的話,就已經改過來了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.