我想用Java监视以下系统信息:
可用磁盘空间(免费/总计)
*请注意,我的意思是整个系统可用的整体内存,而不仅仅是JVM.
我正在寻找一种不依赖于我自己的代码调用外部程序或使用JNI的跨平台解决方案(Linux,Mac和Windows).虽然这些是可行的选择,但如果有人已经拥有更好的解决方案,我宁愿不自己维护特定于操作系统的代码.
如果有一个免费的库可以以可靠的跨平台方式实现这一点,那就太棒了(即使它进行外部调用或使用本机代码本身).
任何建议都非常感谢.
为了澄清,我想获得整个系统的当前CPU使用率,而不仅仅是Java进程.
SIGAR API在一个软件包中提供了我正在寻找的所有功能,因此它是迄今为止我的问题的最佳答案.但是,由于它是根据GPL许可的,我不能将它用于我的原始目的(封闭源,商业产品).Hyperic可能会将SIGAR许可用于商业用途,但我还没有调查过.对于我的GPL项目,我将来肯定会考虑SIGAR.
根据我目前的需求,我倾向于以下方面:
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中服务器的CPU和内存使用情况,有谁知道怎么做?
有没有什么好方法可以在运行时将剩余内存提供给JVM?这种情况的用例是让Web服务在接近其内存限制时优雅地失败,拒绝新连接时出现错误消息"太多人使用它,稍后再试",而不是突然死于OutOfMemory错误.
注意,这与预先计算/估计每个对象的成本无关.原则上,我可以估计我的对象占用了多少内存,并根据该估计拒绝新连接,但这似乎有点hacky/fragile.
假设我有一个类进行一些繁重的处理,使用多个集合进行操作.我想要做的是确保这样的操作不会导致内存不足甚至更好我想设置一个可以使用多少内存的阈值.
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应用程序获取系统和硬件信息.
我对......感兴趣:
是否有可以执行此操作的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
我正在尝试检查程序的性能.我在这篇文章中提到了OS级系统信息.当Runtime.availableProcessors()
执行时,我得到的答案4.我读了availableProcessors()但它告诉该方法返回处理器数
我使用的是Windows 7核心i5 4gp.
是否有可能在java中检测处理器架构?像x86或sun SPARC等?如果是这样,我该怎么做呢?
我确实想在文本字段(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 ×10
cpu ×2
memory ×2
performance ×2
diskspace ×1
heap-memory ×1
jna ×1
junit ×1
motherboard ×1
ram ×1
runtime ×1
system ×1
testng ×1
unit-testing ×1
web-services ×1
windows ×1