Java - 获取Windows系统下的打开文件描述符数

5
如何在Windows下获取打开文件描述符的数量?
在Unix系统中可以使用以下命令:
UnixOperatingSystemMXBean.getOpenFileDescriptorCount()

但是似乎Windows没有相应的功能?
1个回答

1
这本来是一条评论,但是变得有点冗长了。
关于为什么在ServerFault上可能会缺乏等效性(Windows Server 2008 R2最大打开文件限制),存在不同的答案。简而言之:Windows只受可用硬件的限制,而不是受32位或64位实现的限制(MS Technet Blog帖子-推动Windows的极限:处理器)。当然,这是旧信息。

但是!如果您查看com.sun.management 的JavaDocs,您当然会注意到缺少Windows版本的UnixOperatingSystemMXBean,该版本将扩展OperatingSystemMXBean以提供功能。即使UnixOperatingSystemMXBean只存在于提供getMaxFileDescriptorCount()getOpenFileDescriptorCount(),因此似乎不太可能Windows具有相同的概念。

编辑:

我找到了一个很好的小程序,可以展示这一点,我进行了微调。 Descriptors.java

import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.lang.reflect.Method;

class Descriptors {
    public static void main(String [ ] args) {
        System.out.println(osMxBean.getClass().getName());
        OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean();
        try {
            Method getMaxFileDescriptorCountField = osMxBean.getClass().getDeclaredMethod("getMaxFileDescriptorCount");
            Method getOpenFileDescriptorCountField = osMxBean.getClass().getDeclaredMethod("getOpenFileDescriptorCount");
            getMaxFileDescriptorCountField.setAccessible(true);
            getOpenFileDescriptorCountField.setAccessible(true);
            System.out.println(getOpenFileDescriptorCountField.invoke(osMxBean) + "/" + getMaxFileDescriptorCountField.invoke(osMxBean));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在Linux上:
com.sun.management.UnixOperatingSystem
11/2048

在Windows上:
sun.management.OperatingSystemImpl
java.lang.NoSuchMethodException: 
sun.management.OperatingSystemImpl.getMaxFileDescriptorCount()
at java.lang.Class.getDeclaredMethod(Unknown Source)
at Descriptors.main(Descriptors.java:10)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接