0

合計ファイル記述子を見つけようとしていますが、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() が私の OS (Mac OS X) に実装されていない/利用できないことは明らかです。これを修正するにはどうすればよいですか? 「libsigar-universal64-macosx.dylib」をクラスパスに追加しようとしましたが、うまくいきませんでした。

また、sigar から取得する代わりに、以下のように ProcFd を作成してみました。

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 を返すかどうかはわかりません。つまり、OS の実装がありません。あれは正しいですか?

また、「sigar.getProcFd()」を使用して ProcFd を取得すると、上記の例外がスローされるのはなぜでしょうか。しかし、「ProcFd proc = new ProcFd()」を使用して作成すると、そうではありませんが、proc.getTotal() は常に 0 を返しますか?

4

2 に答える 2

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
于 2016-03-05T02:12:46.080 に答える
0

sigar ライブラリを使用する代わりに、シェル スクリプトで lsof を使用することになりました。これをMacで動作させることはありませんでした。Linux で試してみましたが、問題なく動作しました。

于 2015-05-08T16:25:23.993 に答える