查找总文件描述符会引发异常

时间:2015-04-26 18:54:17

标签: java macos sigar

我正在尝试查找总文件描述符,并发现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)

从例外情况来看,很明显我的操作系统(Mac OS X)上没有实现/可用本机方法 - gather()。我该如何解决?我尝试将“libsigar-universal64-macosx.dylib”添加到类路径中,但没有运气。

另外,我尝试创建类似于下面的ProcFd,而不是从sigar获取它:

ProcFd proc = new ProcFd();
System.out.println("Total FD: " + proc.getTotal());

在这种情况下,输出始终为0.基于api doc,它看起来应该提供打开文件描述符的总数(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?

2 个答案:

答案 0 :(得分:0)

我最终在shell脚本中使用lsof而不是使用sigar库。从来没有在Mac上工作。我试过Linux,它没有任何问题。

答案 1 :(得分:0)

答案在文档(http://cpansearch.perl.org/src/DOUGM/hyperic-sigar-1.6.3-src/docs/javadoc/org/hyperic/sigar/ProcFd.html)中,根据您的发现:不支持OSX。

getTotal

public long getTotal()
Get the Total number of open file descriptors.
Supported Platforms: AIX, HPUX, Linux, Solaris, Win32.

System equivalent commands:

AIX: lsof
Darwin: lsof
FreeBSD: lsof
HPUX: lsof
Linux: lsof
Solaris: lsof
Win32: 
Returns:
Total number of open file descriptors
相关问题