如何使用 java 程序或 JMX 获取远程计算机的系统总 CPU 使用百分比

发布于 2025-01-04 05:04:10 字数 199 浏览 3 评论 0原文

您好,在我的系统中将有一个主节点和 n 个从节点。主节点将传入请求转发到其从节点之一。我想找到其所有从节点的CPU使用率,以便我可以将请求转发到适当的节点。我发现了类似的问题,他们回答使用 getCpuUsage() 来查找。但是当我使用它时出现错误,例如找不到符号:getCpuUsage()。任何人都可以建议我如何找到(从属节点及其 IP 地址的)CPU 使用率百分比。提前致谢。

Hi in my system there will be a master node and n number of slave nodes. The master node will forward the incoming request to one of its slave nodes. I want to find the CPU usage of all its slave node, So that i can forward the request to the appropriate node. I have found similar question like this in that they answered to use getCpuUsage() to find. But when i use it am getting an error like cannot find symbol: getCpuUsage(). Can any one please suggest me how can i find the cpu usage percentage (of the slave node with their i.p address). Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心房敞 2025-01-11 05:04:10

我使用这段代码片段来计算 CPU 负载,并使用从 jconsole 中提取的 java 1.5 来计算:

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

  }

I used this snipped of code to compute cpu load with java 1.5 extracted from 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; 
 }

  }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文