から情報を読み取る Java の監視クライアントを投影しています/proc
。メインクラスMonitoringClient
とProcParser
クラスがあります。私のProcParser
拡張しThread
ます。
ProcParser
多くの (CPU、メモリ、ディスク、ネットワークの 4 つ)オブジェクトをインスタンス化し、コンストラクターで測定したいコンポーネントの 1 つを渡すのは良い方法だと思いました。次に、run メソッドで、then を切り替えます。各オブジェクトは、そのうちの 1 つを解析します。コードは次のようになります。
ProcParser pp_Cpu = new ProcParser(UsageType.CPU, 1000, Pid.getPid());
ProcParser pp_Memory = new ProcParser(UsageType.MEMORY, 1000, Pid.getPid());
ProcParser pp_Disk = new ProcParser(UsageType.DISK, 1000, Pid.getPid());
ProcParser pp_Network = new ProcParser(UsageType.NETWORK, 1000, Pid.getPid());
ArrayList<String> cpuData = null;
ArrayList<String> memoryData = null;
ArrayList<String> diskData = null;
ArrayList<String> networkData = null;
pp_Cpu.start();
pp_Memory.start();
pp_Disk.start();
pp_Network.start();
for (;;) {
if (pp_Cpu.isReady() && pp_Memory.isReady()
&& pp_Disk.isReady() && pp_Network.isReady()) {
cpuData = pp_Cpu.getUsageData();
memoryData = pp_Memory.getUsageData();
diskData = pp_Disk.getUsageData();
networkData = pp_Network.getUsageData();
} else {
sleep(1000); //this does not work. I have to extend to Thread also the main class?
}
}
収集された値をときどき確認するにはどうすればよいですか? また、スレッド (メイン コンポーネントごとに 1 つ) を作成する方法は、Java スレッディングの観点から良いアプローチですか? 前もって感謝します。
ProcParser 内でメソッドを実行します。
@Override
public void run() {
if ((this.usageType == null) || (this.sleepTime < 0) || (this.processPid < 0)) {
throw new IllegalArgumentException();
}
//Forever sleep and gather the usage values
for (;;) {
this.ready = false;
switch (this.usageType) {
case CPU:
this.gatherCpuUsage();
this.ready = true;
break;
case MEMORY:
this.gatherMemoryUsage(this.processPid);
this.ready = true;
break;
case DISK:
this.gatherDiskUsage();
break;
case NETWORK:
this.gatherNetworkUsage();
break;
case PARTITION:
this.gatherPartitionUsage();
break;
default:
break;
}
}
}