相关疑难解决方法(0)

如何在Java中监视计算机的CPU,内存和磁盘使用情况?

我想用Java监视以下系统信息:

  • 当前CPU使用率**(百分比)
  • 可用内存*(免费/总计)
  • 可用磁盘空间(免费/总计)

    *请注意,我的意思是整个系统可用的整体内存,而不仅仅是JVM.

我正在寻找一种不依赖于我自己的代码调用外部程序或使用JNI的跨平台解决方案(Linux,Mac和Windows).虽然这些是可行的选择,但如果有人已经拥有更好的解决方案,我宁愿不自己维护特定于操作系统的代码.

如果有一个免费的库可以以可靠的跨平台方式实现这一点,那就太棒了(即使它进行外部调用或使用本机代码本身).

任何建议都非常感谢.

为了澄清,我想获得整个系统的当前CPU使用率,而不仅仅是Java进程.

SIGAR API在一个软件包中提供了我正在寻找的所有功能,因此它是迄今为止我的问题的最佳答案.但是,由于它是根据GPL许可的,我不能将它用于我的原始目的(封闭源,商业产品).Hyperic可能会将SIGAR许可用于商业用途,但我还没有调查过.对于我的GPL项目,我将来肯定会考虑SIGAR.

根据我目前的需求,我倾向于以下方面:

  • 对于CPU使用率,OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()(每个CPU的平均负载)
  • 对于记忆,OperatingSystemMXBean.getTotalPhysicalMemorySize()OperatingSystemMXBean.getFreePhysicalMemorySize()
  • 对于磁盘空间,File.getTotalSpace()File.getUsableSpace()

限制:

getSystemLoadAverage()和磁盘空间查询方法仅仅是Java的6下可用另外,一些JMX功能可能无法适用于所有平台(即它的报道,getSystemLoadAverage()返回-1在Windows上).

尽管最初是根据GPL许可,它已经改变Apache 2.0中,这通常可以用于封闭源代码,商业产品.

java memory cpu diskspace cross-platform

176
推荐指数
10
解决办法
24万
查看次数

如何从java获取OS的CPU使用百分比

我想从java代码计算OS的CPU使用百分比.

  1. 有几种方法被找到它unix的命令[例如,使用mpstat,/proc/stat等...]和使用Runtime.getRuntime().exec

但我不想使用系统调用.

我试过了 ManagementFactory.getOperatingSystemMXBean()

OperatingSystemMXBean osBean =
         (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
System.out.println(osBean.getSystemLoadAverage());
Run Code Online (Sandbox Code Playgroud)

但它给出了cpu加载但不是cpu使用.反正有没有找到使用百分比?

java jmx

25
推荐指数
2
解决办法
5万
查看次数

Java多线程 - 线程优先级

任何人都可以解释线程优先级如何在java中工作.这里的困惑是,如果java不保证Thread根据其优先级的实现,那么为什么这个setpriority()函数用于.

我的代码如下:

public class ThreadSynchronization implements Runnable{

    public synchronized void run() {
        System.out.println("Starting Implementation of Thread "+Thread.currentThread().getName());
        for(int i=0;i<10;i++)
        {
            System.out.println("Thread "+Thread.currentThread().getName()+" value : "+i);
        }
        System.out.println("Ending Implementation of Thread "+Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        System.out.println("Program starts...");
        ThreadSynchronization th1 = new ThreadSynchronization();
        Thread t1 = new Thread(th1);
        t1.setPriority(1);
        synchronized(t1)
        {
            t1.start();
        }

        ThreadSynchronization th2 = new ThreadSynchronization();
        Thread t2 = new Thread(th2);
        t2.setPriority(9);
        synchronized (t2) {
            t2.start(); 
        }

        System.out.println("Program ends...");
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,即使我改变优先级,我发现输出没有区别.另外,如何使用线程优先级的实时应用将会有很大帮助.谢谢.

java multithreading thread-priority

11
推荐指数
2
解决办法
7632
查看次数