java 获取虚拟机内存_如何使用JAVA获取虚拟机的可用内存大小(ram)(How to get the free memory size (ram) of a virtual machine us...

如何使用JAVA获取虚拟机的可用内存大小(ram)(How to get the free memory size (ram) of a virtual machine using JAVA)

我正在尝试获取虚拟机上使用的百分比ram。

在我的计算机本地,我通过使用:

Double FreeRamSize = (double) mxBean.getFreePhysicalMemorySize() Double TotalRamSize = (double) mxBean.getTotalPhysicalMemorySize()

它完美无缺。 但是,如果我在虚拟机上部署我的应用程序,我将只有总物理内存大小,我的FreeRamSize将始终返回0.我没有在互联网上找到任何提示。

提前感谢您的帮助。

I'm trying to get the used percentage ram used on a virtual machine.

In local on my computer I achieve it by using :

Double FreeRamSize = (double) mxBean.getFreePhysicalMemorySize() Double TotalRamSize = (double) mxBean.getTotalPhysicalMemorySize()

And it works perfectly fine. But if I deploy my app on a virtual machine, I will only have the total physical memory size and my FreeRamSize will always return 0. I didn't find any tips on internet.

Thank in advance for your help.

原文:https://stackoverflow.com/questions/37256899

2020-02-06 22:42

满意答案

您不应该修改内存信息代码来运行虚拟机,因为虚拟机和物理机RAM之间的底层差异应该与Java进程完全无关。

只是为了踢,我在我自己的虚拟机上运行它没有任何问题。

double GiB = Math.pow(2, 30);

OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);

Double freeRamSize = (double) osBean.getFreePhysicalMemorySize();

Double totalRamSize = (double) osBean.getTotalPhysicalMemorySize();

System.out.println(freeRamSize / GiB + " / " + totalRamSize / GiB);

1.8224868774414062 / 3.9995040893554688

You should not need to modify the memory information code to run a virtual machine since the underlying differences between a virtual machine and physical machines RAM should be completely irrelevant to a Java process.

Just for kicks I ran this on my own virtual machine with no problems.

double GiB = Math.pow(2, 30);

OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);

Double freeRamSize = (double) osBean.getFreePhysicalMemorySize();

Double totalRamSize = (double) osBean.getTotalPhysicalMemorySize();

System.out.println(freeRamSize / GiB + " / " + totalRamSize / GiB);

1.8224868774414062 / 3.9995040893554688

2016-05-16

相关问答

JVM是一个标准进程,就像其他进程一样。 因此,两者之间没有隐含的沟通或国家共享。 每个人都有自己的堆,线程等。如果你杀了一个,它不会影响另一个。 将被共享的是JVM本身的代码页。 内核足够智能,可以识别相同的二进制文件( 任何二进制文件,不仅仅是JVM),而是运行两次并重新使用映像。 这只适用于实际的二进制代码 - 而不是它的状态。 请参阅此处了解更多信息。 Linux操作系统。 JVM不是守护进程,但可以在系统启动时作为Windows服务或Unix / Linux进程启动(通过/etc/ini...

您需要查看JVM内存参数。 实际上,您可以根据需要为JVM设置尽可能多的内存: -Xmx2048m -> this param to set the max memory that the JVM can allocate

-Xms1024m -> the init memory that JVM will allocate on the start up

-XX:MaxPermSize=512M -> this for the max Permanent Generation memory

因...

好吧,我找到了答案。 在du命令的帮助下,我发现在我的程序所在的地图中出现了一些非常严重的错误,虽然我找不到一个裸露的东西,直到我打开选项'show hidden files'。 然后出现了一个名为xsession-errors.old的26gb大文件。 它停止增长,因为没有空间让文件增长并使用所有可用空间。 位于隐藏文件中的26gb会话错误。 那肯定让我生气了。 我希望这个解释可以帮助将来遇到类似问题的人。 感谢qdii发表评论并帮助我 Alright, I've found an answer...

3000/48是关于旋转驱动器的速度(经验法则:每I / O 10ms)。 所以听起来像innodb_flush_log_at_trx_commit=1 。 3000 / 1.5听起来比SSD还要好,所以我猜测有一个带有电池备份写缓存的RAID控制器,这会使大多数写操作几乎是瞬间完成的。 拥有1的设置就没问题了。 或者驱动器可能具有启用的写入缓存。 3000/48 is about a spinning drive's speed (Rule of Thumb: 10ms per I/O). So...

取得成功的一个重要关键是为您的应用程序提供1GB的虚拟地址空间。 对于32位Windows应用程序,默认情况是应用程序以大约2GB的地址空间开始。 如果您在应用程序之前在失败的应用程序之前执行了很多分配,则很可能已经划分出足够的原始地址空间,以便不留下1GB的连续地址空间。 应用程序只能执行两个小的“策略性放置”分配,这些分配会破坏地址空间,使剩余部分都小于1GB。 One important key to making that succeed is to have 1GB of virtual...

它被称为为您的程序分配的虚拟内存 。 这不是你称之为RAM的真实记忆。 虚拟内存也有一个最大限制,但它高于RAM。 它由您的操作系统实施(并定义)。 It's called virtual memory which is allocated for your program. It's not real memory which you call RAM. There is a max limit for virtual memory as well, but it's higher than R...

您不应该修改内存信息代码来运行虚拟机,因为虚拟机和物理机RAM之间的底层差异应该与Java进程完全无关。 只是为了踢,我在我自己的虚拟机上运行它没有任何问题。 double GiB = Math.pow(2, 30);

OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);

Double freeRamSize = (double) osBean.getFre...

测试的第一次迭代可能使用大页面(2 MB页面),因为THP:透明的Hugepage - https://www.kernel.org/doc/Documentation/vm/transhuge.txt - 检查你的/ sys / kernel / mm /在执行测试期间,transparent_hugepage / enabled和grep AnonHugePages /proc/meminfo 。 应用程序运行速度更快的原因是两个因素。 第一个因素几乎是完全无关紧要的,并没有引起人们的极大兴趣...

如果物理内存的大小是2 ^ 32-1,那么虚拟内存的大小是多少? 虚拟地址空间的大小与物理地址空间的大小无关。 没有答案。 那么在虚拟记忆中,一个空间可以分配多少空间? 这取决于硬件限制,系统参数和过程配额。 这个大小(为虚拟内存中的每个进程分配的空间)是否超过了我们的RAM大小? 是的,经常这样做。 我的意思是如果我们的RAM是4GB,那么对于一个进程来说,虚拟内存的最大大小是多少? 它可以是任何东西。 公羊的大小无法控制。 我们可以为每个进程提供4GB的虚拟内存吗?或者每个进程可以拥有超过4G...

相关文章

http://spark-project.org/ 项目首页 http://shark.cs.berk

...

Quite a few small business owners decide to outsour

...

Linux 上的free命令详解的内容摘要:解释一下Linux上free命令的输出。  下面是free

...

IOS/android美术资源压缩相关工具使用,shell编写; 美术资源地图压缩方案; IAP支付o

...

Book Report: THE SOUL OF A NEW MACHINE Zhengdong Zh

...

Windowsis an extremely effective and a an efficient

...

List的size大于0,但是取到的值为null,谁见过这种情况? List list=XXDAO.

...

中文名: 虚拟机系统与进程的通用平台 原名: Virtual Machines: Versati

...

本书作者曾因本书荣获专业技术杂志《Java Report》评选的优秀作者奖,细心的读者可以从网上找到许

...

Understanding the Basics of Working in a Garbage-Co

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值