我目前正在构建一个Java应用程序,最终可能会在许多不同的平台上运行,但主要是Solaris,Linux和Windows的变种.
有没有人能够成功提取信息,例如当前使用的磁盘空间,CPU利用率和底层操作系统中使用的内存?那么Java应用程序本身正在消耗什么呢?
我更希望在不使用JNI的情况下获取此信息.
我正在尝试使用Java来获取当前运行的Java虚拟机所使用的CPU百分比.我的研究指出我使用这门com.sun.management.OperatingSystemMXBean课程.以下是在线示例,我写了以下内容:
import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
public class TestClass {
public static void main (String[] args) {
OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
System.out.println(bean.getProcessCpuLoad());
System.out.println(bean.getSystemCpuLoad());
}
}
Run Code Online (Sandbox Code Playgroud)
在两台机器上测试后,我无法停止获得-1.0两个调用的结果.我尝试通过各种方法使用64位和32位版本的Java 7和6来运行此代码.不过,我得到的是打印出的-1.0该,根据的Javadoc,
All values betweens 0.0 and 1.0 are possible depending of the activities going on in the system. If the system recent cpu usage is not available, the method returns a negative value.
我不知道这里还能做什么.获得CPU负载至关重要,我想避免使用像Sigar这样的其他库.有人对此问题有任何建议或有任何见解吗?
我已经搜索过可能的解决方案,例如如何在Java中监控计算机的CPU,内存和磁盘使用情况?.但在缓冲区和缓存中花费的内存在任何地方都没有提到
例如,在linux上,free -m的输出:
total used free shared buffers cached
Mem: 2011 1835 175 0 309 847
-/+ buffers/cache: 678 1333
Swap: 1998 0 1998
我已经测试了sigar的输出,它将可用内存报告为175 MB.
这个问题的原因是如何检测OS何时剩余的内存很少?在之前的输出中free -m,175 MB似乎相当低; 但是通过添加缓冲区和缓存,很明显可用内存实际上是2 GB中的1333 MB.
总结一下,使用java,可以获得1333 MB的值作为空闲内存的值吗?正如我已经提到的,到目前为止我只知道如何获得175 MB的价值.
我想获得总物理内存,CPU使用率和使用的内存量.我已经研究过Runtime.freeMemory(),但这不是整个系统的免费记忆.
我发现这篇较旧的文章如何监视计算机 -cpu -memory-and-disk-usage-in-java并且有问题,如果java 7中有新内容我想获得当前的CPU- ,RAM-和netzwork-定期使用我的应用程序.它必须适用于linux(mac)和windows.数据不能非常详细,3个值就足够了(cpu:10%,Ram 4%,Network 40%).如果数据仅适用于应用程序而不是整个操作系统,那将会很酷,但这也可行.
感谢帮助
我们可以对正在运行的线程进行弱引用,以便在低性能CPU中终止吗?
我的意思是,做这样的工作吗?
WeakReference<Thread> ref = new WeakReference<Thread>(new Thread(){
public void run(){
while(true){ /* your code */ }
}
});
Run Code Online (Sandbox Code Playgroud)
这样,我想要一个线程具有低优先级来执行,我的意思是当CPU性能为低并且CPU完全使用时,线程的执行会自动终止.
有些线程不具有高优先级,应该以低CPU性能中断和终止.
我正在尝试在 NLG 的帮助下生成产品描述。例如,如果我指定产品的属性(例如手机),例如其操作系统、RAM、处理器、显示器、电池等,它应该向我输出手机的可读描述。我看到有一些付费服务(Quill、Wordsmith 等)也是如此。然后我遇到了 NLG 的开源 Java API - simplenlg。我看到如何通过指定句子短语和特征(如时态、询问等)来创建句子,但没有看到从文本创建描述的选项。
有谁知道如何使用 simplenlg 从单词创建文本描述?
是否有其他工具/框架/API 可用于完成此任务(不限于 Java)?
我想获取CPU使用率来使用java连续更新我的数据库。在第一个循环中,此代码可读取正确的 CPU 使用情况。之后,它返回小于 0 的错误值。所以,我卡住了。
我用的是jdk 1.8.124。
请让我知道如何连续获取CPU使用率。
库
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.HardwareAbstractionLayer;
Run Code Online (Sandbox Code Playgroud)
源代码
public static void main(String[] args) {
OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
while (true) {
System.out.println(bean.getProcessCpuLoad());
System.out.println(bean.getSystemCpuLoad());
try {
Thread.sleep(3000);
}
catch (Exception e){
System.out.println(e.toString());
break;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想写一个小程序只是为了显示CPU使用率百分比,就像任务管理器一样.我知道中级C++和Java.有没有办法用这两种语言做到这一点?如果是这样,也许是一个简短的例子 我看到了一些C++命令的页面,但我无法做出正面或反面.
我在一台计算机上使用Windows 7,在另一台计算机上使用XP.至于多核响应,我只想像任务管理器那样显示CPU使用百分比,即使使用多核处理器也是如此.