相关疑难解决方法(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 Applet可以发现多少硬件细节?

我正在编写一个Java applet,在不同的硬件下运行不同.例如,如果我知道计算机有大量的RAM但是处理器很弱,我可以改变一些时间内存权衡的平衡.能够发现运行applet的CPU的确切品牌和型号可能会有所帮助.拥有这些信息将使我能够针对不同的系统对我的软件进行基准测试并找到瓶颈.

一般来说我正在寻找的是:

  • 核心和/或处理器的数量
  • 32位与64位CPU
  • CPU缓存行大小
  • L1,L2,L3缓存的大小
  • 设置缓存的关联性
  • TLB的大小
  • 关于CPU的精确制造/型号信息
  • FSB信息
  • RAM的数量
  • 交换/虚拟内存量
  • 正在运行applet的JVM
  • 运行JVM的操作系统
  • 系统负载
  • 已使用/未使用的Kernal线程数
  • 互联网连接的带宽
  • 内存可用
  • 显卡正在使用中
  • 如果正在显示操作系统
  • 正在使用的网络资源

是否有任何此类信息都嵌入到Java Applet中.是否有用于查找此类信息的库?Applet基准测试工具来发现/猜测其中的一些?你能想到任何聪明的技巧吗?

他们的计算机硬件的任何方面都是阻塞的.也就是说,Java applet可以通过尝试访问它并被拒绝(可能是特定的TCP端口或图形加速器)来检测某些内容正在使用或不可用.

免责声明:我知道关心硬件违背了不关心硬件的Java意识形态.虽然评论指出这可能对其他阅读此问题的读者有所帮助,但请注意,这些答案并非我所期待的.

编辑

添加了其他信息:

java.lang中.management提供有关运行JVM的系统的各种信息.

java.lang.management.OperatingSystemMXBean提供:

  1. getAvailableProcessors()可用处理器的数量等效Runtime.availableProcessors()
  2. getSystemLoadAverage()系统平均负载最后一分钟的系统负载平均值.

java.lang.management.ManagementFactory

  1. getGarbageCollectorMXBeans()返回GarbageCollectorMXBeans列表.可以查询每个 GarbageCollectorMXBean以获取以下信息:

    1. getCollectionCount()使用此bean发生的gc数.
    2. getCollectionTime()在gc之间经过的近似累计时间(以毫秒为单位).(注意:Java虚拟机实现可能使用高分辨率计时器来测量经过的时间.)
    3. getName()内存管理器的名称.
    4. getMemoryPoolNames()此gc管理的内存池.
  2. getThreadMXBean()返回 ThreadMXBean,它提供:

    1. getCurrentThreadCpuTime()毫秒为单位返回当前线程的总CPU时间.如果实现区分用户模式时间和系统模式时间,则返回的CPU时间是当前线程在用户模式或系统模式下执行的时间量.
  3. getRuntimeMXBean返回 RuntimeMXBean
    1. getUptime() Java虚拟机的正常运行时间(以毫秒为单位).
    2. getStartTime() Java虚拟机的开始时间(以毫秒为单位).
    3. getInputArguments()返回传递给Java虚拟机的输入参数,该参数不包含main方法的参数.
  4. getCompilationMXBean返回 CompilationMXBean
    1. getName() JIT的名称
    2. getTotalCompilationTime()编译代码所用的时间(以毫秒为单位).

java benchmarking operating-system

7
推荐指数
1
解决办法
7171
查看次数