アプリケーションが行う処理の多くがファイルの内容の読み取りであるとします。言うまでもなく、ファイルは開かれて閉じられ、新しいファイルが古いファイルよりも速く読み込まれない限り、何も問題はありません。これは私が陥った困った状況です。
さて、プロセスによって開かれているファイルの数を確実に知る方法はあるでしょうか? ls /proc/my_pid/fd | wc -l
JVM 内部から見るのと同じくらい信頼できる方法はありますか?
答えは OS 固有かもしれないと思うので、私は Linux 上で Java を実行していることを付け加えておきます。
ベストアンサー1
Unixでは、1つの方法として、ManagementFactory
を取得するOperatingSystemMxBean
そしてそれがUnixOperatingSystemMXBean
、このgetOpenFileDescriptorCount()
方法を使うことができます。
コード例:
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import com.sun.management.UnixOperatingSystemMXBean;
public class OpenFileCount{
public static void main(String[] args){
OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
if(os instanceof UnixOperatingSystemMXBean){
System.out.println("Number of open fd: " + ((UnixOperatingSystemMXBean) os).getOpenFileDescriptorCount());
}
}
}