? ? 注意: 寫該文章主要幫助自己記憶,貼出來希望可以給有同樣問題的人解惑,不喜勿噴,可以提意見哦。
問題描述:
java.io.FileNotFoundException: /mnt/sda/sda1/STBDebugInfo11999911081020140101000141/STBPs.txt: open failed: EMFILE (Too many open files);
Caused by: libcore.io.ErrnoException: open failed: EMFILE (Too many open files);
原因:
對于內核而言,所有打開的文件都是通過文件描述符引用。文件描述符是一個非負整數。當打開一個現有文件或創建一個新文件時,內核向進程返回一個文件描述符。
文件描述符的變化范圍是0-OPEN_MAX。不同的系統OPEN_MAX是不同的。
早期的UNIX系統實現才有的上限值是19(允許每個進程最多打開20個文件),但是現在很多系統則將其增至63。對于FreeBSD5.2.1、Mac Os X 10.3以及Solaris 9,文件描述符的變化范圍實際是沒有上限的,它只收到系統配置的存儲器總量,整形的字長以及系統管理員所配置的軟限制和硬限制的約束。Linux2.4.22對于每個進程的文件描述符書的硬限制是1048576。
所以當文件描述符用完后,就會報該問題。