Suppose a lot of what your application does deals with reading contents of the files. Goes without saying that files that are open then closed and life is good unless .. new files come in faster then old files get closed. This is the pickle of a situation i found myself in.
Now .. is there a way to reliably know how many files are open by the process? Something that as reliable as looking at ls /proc/my_pid/fd | wc -l from inside the JVM?
I suspect answer may be OS specific, so let me add that i am running Java on Linux.
解决方案
On unix one way is using the ManagementFactory to get the OperatingSystemMxBean and if it is a UnixOperatingSystemMXBean you can use getOpenFileDescriptorCount() method.
Example Code below
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import com.sun.management.UnixOperatingSystemMXBean;
public class OpenFileCount{
public static void main(String[] args){
OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
if(os instanceof UnixOperatingSystemMXBean){
System.out.println("Number of open fd: " + ((UnixOperatingSystemMXBean) os).getOpenFileDescriptorCount());
}
}
}