ban*_*lit 6 java file-descriptor
如何在Windows下获取打开的文件描述符的数量?
在unix上有这样的:
UnixOperatingSystemMXBean.getOpenFileDescriptorCount()
Run Code Online (Sandbox Code Playgroud)
但似乎没有相同的窗口?
这本来是一条评论,但有点啰嗦。
关于为什么ServerFault 上可能缺乏等效项的答案相互矛盾:Windows Server 2008 R2 max open files limit 。TLDR:Windows 仅受可用硬件的限制,而 Windows 则受 32 位与 64 位实现的限制(MS Technet 博客文章 - 突破 Windows 的极限:句柄)。当然,这是旧信息。
但!com.sun.management 如果您注意到该包的 JavaDocs ,您当然会注意到明显缺少UnixOperatingSystemMXBean扩展OperatingSystemMXBean以提供该功能的 Windows 版本。Even 的UnixOperatingSystemMXBean存在只是为了提供getMaxFileDescriptorCount(),getOpenFileDescriptorCount()因此 Windows 似乎不太可能有相同的概念。
编辑:
我确实找到了一个不错的小程序来展示这一点,我对其进行了调整。 描述符.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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 Linux 上:
com.sun.management.UnixOperatingSystem
11/2048
Run Code Online (Sandbox Code Playgroud)
在 Windows 上:
sun.management.OperatingSystemImpl
java.lang.NoSuchMethodException:
sun.management.OperatingSystemImpl.getMaxFileDescriptorCount()
at java.lang.Class.getDeclaredMethod(Unknown Source)
at Descriptors.main(Descriptors.java:10)
Run Code Online (Sandbox Code Playgroud)