相关疑难解决方法(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中检查CPU和内存使用情况?

我需要检查java中服务器的CPU和内存使用情况,有谁知道怎么做?

java cpu ram operating-system

94
推荐指数
8
解决办法
24万
查看次数

Java获得可用内存

有没有什么好方法可以在运行时将剩余内存提供给JVM?这种情况的用例是让Web服务在接近其内存限制时优雅地失败,拒绝新连接时出现错误消息"太多人使用它,稍后再试",而不是突然死于OutOfMemory错误.

注意,这与预先计算/估计每个对象的成本无关.原则上,我可以估计我的对象占用了多少内存,并根据该估计拒绝新连接,但这似乎有点hacky/fragile.

java memory performance operating-system web-services

65
推荐指数
5
解决办法
7万
查看次数

Java单元测试:如何测量方法调用的内存占用量

假设我有一个类进行一些繁重的处理,使用多个集合进行操作.我想要做的是确保这样的操作不会导致内存不足甚至更好我想设置一个可以使用多少内存的阈值.

class MyClass()
{
   public void myMethod()
   {
      for(int i=0; i<10000000; i++)
      {
         // Allocate some memory, may be several collections
      }
   }
}

class MyClassTest
{
   @Test
   public void myMethod_makeSureMemoryFootprintIsNotBiggerThanMax()
   {
      new MyClass().myMethod(); 
      // How do I measure amount of memory it may try to allocate?
   }
}
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?或者这不可能/不可行?

java junit testng unit-testing out-of-memory

31
推荐指数
3
解决办法
2万
查看次数

如何通过Java获取系统/硬件信息?

我需要通过Java应用程序获取系统和硬件信息.

我对......感兴趣:

  • Os细节;
  • 处理器数量,名称,处理器负载百分比;
  • 记忆状态(总/免费);
  • 每个进程的Os进程(线程)计数和CPU /内存使用情况;
  • 网络统计(针对每个接口);

是否有可以执行此操作的Java库?

java system jna system-information

20
推荐指数
1
解决办法
6万
查看次数

如何使用Java获取Ram的大小和硬盘大小?

如何使用Java获取PC的Ram大小和硬盘大小?是否有可能通过Java在PC上获取当前登录的用户名?

java

20
推荐指数
3
解决办法
3万
查看次数

Java在序列化期间没有堆空间

以下代码导致OutOfMemmoryError:大约300万行的堆空间.分配给JVM的内存为4 GB,使用64位安装.

while (rs.next())
{

    ArrayList<String> arrayList = new ArrayList<String>();
    for (int i = 1; i <= columnCount; i++)
    {
        arrayList.add(rs.getString(i));
    }

    objOS.writeObject(arrayList);
}
Run Code Online (Sandbox Code Playgroud)

ArrayList引用的内存在while循环的每次迭代中都有资格进行垃圾收集,而内部JVM System.gc()在抛出OutOfMemory错误之前会调用garbage collection(),因为堆空间.

那么为什么会发生异常呢?

java serialization garbage-collection heap-memory out-of-memory

19
推荐指数
1
解决办法
8708
查看次数

调用Runtime.getRuntime().availableProcessors()

我正在尝试检查程序的性能.我在这篇文章中提到了OS级系统信息.当Runtime.availableProcessors()执行时,我得到的答案4.我读了availableProcessors()但它告诉该方法返回处理器数

  1. 任何人都可以解释处理器数量的含义吗?
  2. 为什么得到4结果?

我使用的是Windows 7核心i5 4gp.

java windows performance runtime

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

是否有可能在java中检测处理器架构?

是否有可能在java中检测处理器架构?像x86或sun SPARC等?如果是这样,我该怎么做呢?

java cpu-architecture

8
推荐指数
2
解决办法
7484
查看次数

如何在GUI上获取主板序列号(J​​ava)

我确实想在文本字段(GUI面板)中显示主板序列号。我创建了一个文本字段和操作按钮。我在操作按钮中编写了此代码。我在此代码中犯了什么错误?

try {
        Process p = Runtime.getRuntime().exec("wmic baseboard get serialnumber");
        BufferedReader inn = new BufferedReader(new InputStreamReader(p.getInputStream()));

        while (true) {

            String line = inn.readLine();
            if (line == null) {
                break;
            }
            motherboard.setText(line);
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "Sorry could not found motherboard serial!");
    }
Run Code Online (Sandbox Code Playgroud)

java user-interface motherboard

5
推荐指数
1
解决办法
6431
查看次数