当前位置: 首页 > 面试题库 >

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

司空锋
2023-03-14
问题内容

我想用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()返回-1Windows上)。

尽管最初是根据GPL许可的,但已将其更改为Apache 2.0,通常可用于封闭源商业产品。


问题答案:

遵循我在这篇文章中提到的内容。我建议您使用SIGAR API。我在自己的一个应用程序中使用了SIGAR API,这很棒。您会发现它是稳定的,受良好支持的,并且充满了有用的示例。它是开源的,具有GPL 2 Apache 2.0许可证。一探究竟。我感觉它将满足您的需求。

使用Java和Sigar API,您可以获得内存,CPU,磁盘,平均负载,网络接口信息和度量,进程表信息,路由信息等。



 类似资料:
  • 问题内容: 我需要在Java中检查服务器的CPU和内存使用情况,有人知道怎么做吗? 问题答案: 如果你正在专门寻找JVM中的内存: 但是,这些仅应作为估计…

  • 问题内容: 在一次采访中,我被要求计算内存使用量,如果其中有200万个项目,则估计将消耗多少内存。 例如: 映射是这样的。 我如何估计Java中此HashMap对象的内存使用情况? 问题答案: 简短的答案 为了找出对象的大小,我将使用探查器。例如,在YourKit中,您可以搜索对象,然后获取它以计算其深度大小。这将使您很清楚地知道如果对象是独立的,则使用多少内存,并且该对象的大小是保守的。 怪癖

  • 问题内容: 如何监视Node.js的内存使用情况? 问题答案: node-memwatch:检测并查找Node.JS代码中的内存泄漏。查看本教程,以跟踪Node.js中的内存泄漏

  • 如何监视Node.js的内存使用情况?

  • 问题内容: 我目前正在测试将密钥插入数据库Redis(在本地)中。我有超过500万个密钥,而且我只有4GB的RAM,所以一时我达到了RAM的容量并交换了数据(并且我的PC掉了)。 我的问题是:如何在具有Redis数据库的计算机上监视内存使用情况,并以此方式发出警报,不再在Redis数据库中插入某些密钥? 谢谢。 问题答案: 关于内存使用情况,建议您查看redis.io 常见问题解答以及有关将red

  • 问题内容: 有什么工具可以知道我的Java应用程序已使用了多少个本机内存?我的应用程序内存不足:当前设置是:-Xmx900m 计算机,Windows 2003 Server 32位,RAM 4GB。 还在Windows上将boot.ini更改为/ 3GB,会有什么不同吗?如果设置为Xmx900m,则可以为此进程分配多少最大本机内存?是1100m吗? 问题答案: (就我而言,我使用的是Java 8)