如何找出Java应用程序当前打开的文件数?
问题内容:
假设您的应用程序所做的很多事情都与读取文件内容有关。不用说,打开然后关闭的文件很有效,除非…新文件的传入速度比旧文件快。这是我发现自己遇到的情况的泡菜。
现在,有没有办法可靠地知道该进程打开了多少文件?像ls /proc/my_pid/fd | wc -l
从JVM内部看一样可靠的东西吗?
我怀疑答案可能是特定于操作系统的,所以让我补充一点,我在Linux上运行Java。
问题答案:
在Unix上,一种方法是使用ManagementFactory
获取方法OperatingSystemMxBean
,如果是UnixOperatingSystemMXBean
,则可以使用该getOpenFileDescriptorCount()
方法。
示例代码:
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());
}
}
}