合計ファイル記述子を見つけようとしていますが、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 を返しますか?