Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得系统&x27;s使用java程序或JMX的远程计算机的CPU总使用率百分比_Java_Monitoring_Jmx_Cpu Usage - Fatal编程技术网

如何获得系统&x27;s使用java程序或JMX的远程计算机的CPU总使用率百分比

如何获得系统&x27;s使用java程序或JMX的远程计算机的CPU总使用率百分比,java,monitoring,jmx,cpu-usage,Java,Monitoring,Jmx,Cpu Usage,Hi在我的系统中将有一个主节点和n个从节点。主节点将传入的请求转发给它的一个从节点。我想找到所有从节点的CPU使用情况,以便将请求转发到适当的节点。我发现了类似的问题,他们回答使用getCpuUsage()来查找。但当我使用它时,会出现一个错误,比如找不到符号:getCpuUsage()。有谁能告诉我如何找到cpu使用率百分比(从节点的i.p地址)。提前感谢。我使用从jconsole中提取的java 1.5来计算cpu负载: public class CPULoad { priva

Hi在我的系统中将有一个主节点和n个从节点。主节点将传入的请求转发给它的一个从节点。我想找到所有从节点的CPU使用情况,以便将请求转发到适当的节点。我发现了类似的问题,他们回答使用getCpuUsage()来查找。但当我使用它时,会出现一个错误,比如找不到符号:getCpuUsage()。有谁能告诉我如何找到cpu使用率百分比(从节点的i.p地址)。提前感谢。

我使用从jconsole中提取的java 1.5来计算cpu负载:

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; 
 }

  }

这并不真正计算cpu负载。它只计算cpu忙于当前Java进程的时间,而不计算任何其他进程的时间。非常感谢您的代码。但这似乎可以找到当前机器上的cpu负载。但是如何找到将连接到网络中的从节点的cpu负载。是否可以通过远程访问找到从属节点的cpu负载。。?