2017-07-21 10 views
3

Windowsで開いているファイルディスクリプタの数を取得するにはどうすればよいですか? UNIX上Java - Windows用getOpenFileDescriptorCount

これがあります:

UnixOperatingSystemMXBean.getOpenFileDescriptorCount() 

は、しかし、窓の等価があるように思えないのですか?

答えて

0

これはコメントになるだろうが、少し長めになった。

なぜ同等性の欠如があるのか​​についての矛盾する回答here on ServerFault: Windows Server 2008 R2 max open files limit。 TLDR:Windowsは利用可能なハードウェアとWindowsの制限が32対64ビットの実装(MS Technet Blog Post - Pushing the Limits of Windows: Handles)によって制限されています。確かに、これは古い情報です。

しかし! com.sun.managementpackageのJavaDocsに注意する場合は、機能を提供するためにに拡張されるUnixOperatingSystemMXBeanのWindows版が目立たないことに注意してください。 UnixOperatingSystemMXBeanでさえ、getMaxFileDescriptorCount()getOpenFileDescriptorCount()を提供するためにのみ存在するので、Windowsに同じ概念があるとは思われません。

編集:

私は一種の私は微調整このオフを示し、ちょっといいプログラムを見つけました。 Linuxの 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(); 
     } 
    } 
} 

:Windowsでは

com.sun.management.UnixOperatingSystem 
11/2048 

sun.management.OperatingSystemImpl 
java.lang.NoSuchMethodException: 
sun.management.OperatingSystemImpl.getMaxFileDescriptorCount() 
at java.lang.Class.getDeclaredMethod(Unknown Source) 
at Descriptors.main(Descriptors.java:10) 
関連する問題