我正在尝试查找总文件描述符,并发现 sigar api 允许获取这些信息。但是,在尝试执行以下操作时
Sigar sigar = new Sigar();
sigar.getProcFd(<pid>);
如果抛出以下异常,则用实际进程替换 pid:
org.hyperic.sigar.SigarNotImplementedException: This method has not been implemented on this platform
at org.hyperic.sigar.SigarNotImplementedException.<clinit>(SigarNotImplementedException.java:28)
at org.hyperic.sigar.ProcFd.gather(Native Method)
at org.hyperic.sigar.ProcFd.fetch(ProcFd.java:30)
at org.hyperic.sigar.Sigar.getProcFd(Sigar.java:531)
从异常中可以清楚地看出,本机方法 -gather() 尚未在我的操作系统(Mac OS X)上实现/可用。我该如何解决?我尝试将“libsigar-universal64-macosx.dylib”添加到类路径但没有运气。
另外,我尝试像下面这样创建 ProcFd,而不是从 sigar 获取它:
ProcFd proc = new ProcFd();
System.out.println("Total FD: " + proc.getTotal());
在这种情况下,输出始终为 0。根据 api 文档,它看起来应该提供打开文件描述符的总数(http://cpansearch.perl.org/src/DOUGM/hyperic-sigar-1.6.3 -src/docs/javadoc/org/hyperic/sigar/ProcFd.html)。由于与上述相同的原因(即缺少我的操作系统的实现),不确定它是否返回 0。那是对的吗?
另外,想知道为什么当 ProcFd 使用“sigar.getProcFd()”时会引发上述异常。但是当使用“ProcFd proc = new ProcFd()”创建时它不会,但是 proc.getTotal() 总是返回 0?