Как получить общий процент использования ЦП системой удаленного компьютера с помощью Java-программы или JMX - PullRequest
0 голосов
/ 09 февраля 2012

Привет, в моей системе будет главный узел и n подчиненных узлов. Главный узел перенаправит входящий запрос одному из своих подчиненных узлов. Я хочу найти использование ЦП всего его подчиненного узла, чтобы я мог переслать запрос соответствующему узлу. Я нашел подобный вопрос, как это в том, что они ответили, чтобы использовать getCpuUsage (), чтобы найти. Но когда я использую его, я получаю сообщение об ошибке вроде не могу найти символ: getCpuUsage (). Может ли кто-нибудь, пожалуйста, предложите мне, как я могу найти процент использования процессора (подчиненного узла с их IP-адресом). Заранее спасибо.

1 Ответ

1 голос
/ 09 февраля 2012

Я использовал этот фрагмент кода для вычисления загрузки процессора с помощью Java 1.5, извлеченного из jconsole:

public class CPULoad {

      private static long prevUpTime, prevProcessCpuTime;

      private static RuntimeMXBean rmBean;        

      private static com.sun.management.OperatingSystemMXBean sunOSMBean;

      private static Result result;

      private static class Result {
        long upTime = -1L;
        long processCpuTime = -1L;
        float cpuUsage = 0;
                int nCPUs;    
      }

      static{
       try {
        rmBean = ManagementFactory.getRuntimeMXBean();                              
        //reperisco l'MBean relativo al sunOS
        sunOSMBean  = ManagementFactory.newPlatformMXBeanProxy(
                    ManagementFactory.getPlatformMBeanServer(), 
                        ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME,
                    com.sun.management.OperatingSystemMXBean.class
                );           

       result = new Result();
       result.nCPUs = sunOSMBean.getAvailableProcessors();
       result.upTime = rmBean.getUptime();
       result.processCpuTime = sunOSMBean.getProcessCpuTime();

       }catch(Exception e){
          System.err.println(CPULoad.class.getSimpleName()+" exception: "+e.getMessage());          
       }
  }


  public CPULoad(){ }


  public float getCPULoad(){

    result.upTime = rmBean.getUptime();
    result.processCpuTime = sunOSMBean.getProcessCpuTime();

   if(result.upTime > 0L && result.processCpuTime >= 0L) 
         updateCPUInfo();

    return result.cpuUsage;

   }

  public void updateCPUInfo() {
    if (prevUpTime > 0L && result.upTime > prevUpTime) {
        // elapsedCpu is in ns and elapsedTime is in ms.
        long elapsedCpu = result.processCpuTime - prevProcessCpuTime;
        long elapsedTime = result.upTime - prevUpTime;
        // cpuUsage could go higher than 100% because elapsedTime
        // and elapsedCpu are not fetched simultaneously. Limit to
        // 99% to avoid Plotter showing a scale from 0% to 200%.
        result.cpuUsage =
            Math.round(
                Math.min(100F,
                        elapsedCpu / (elapsedTime * 10000F * result.nCPUs) 
                        ) 
                    );                      
    }

    prevUpTime = result.upTime;
    prevProcessCpuTime = result.processCpuTime; 
 }

  }
...