查找JVM分配的内存

5
我正在寻找一种简单的方法,以查找JVM在我的计算机上为特定进程分配了多少内存。我尝试使用VisualVM,但它无法找到该进程。需要说明的是,这是运行在Windows服务中,而不是常规进程。有什么建议吗?提前感谢您。
3个回答

7

Java运行环境(JRE)提供了一个称为 jps 的命令,您可以使用它来查看所有正在运行的Java进程。使用 jps -v 命令,您可以查看每个进程的启动参数。

terminal

在这里,您可以查看启动参数,从而确定每个进程的内存使用情况。

这个命令也可以在Windows上运行,只需将终端替换为命令提示符即可。


这个命令可以直接在 Windows 的 CMD 中运行吗?还是需要在特定路径下执行? - David Faizulaev
我不知道,我没有使用Windows,但我相信你应该能够从任何文件夹中调用它。它会返回在JVM上运行的进程列表,与文件夹无关。 - Bryan Abrams
嘿Bryan,它在Windows上可以运行,只需要Java主目录的路径,谢谢。 出于某种原因,这也找不到它。 我应该提到它正在运行一个Windows服务,而不是常规进程。 - David Faizulaev
如果目标Java应用程序正在作为服务运行,则jps将无法运行。 - MarkI

6
我在安卓中使用以下方法(如果您想了解编程方式):
// get the total memory for my app
long total = Runtime.getRuntime().totalMemory();
// get the free memory available
long free = Runtime.getRuntime().freeMemory();

// some simple arithmetic to see how much i use
long used = total - free;

System.out.println("Used memory in bytes: " + used);

这也适用于PC(刚刚测试过)!


是的,我刚进入Eclipse。当然,您需要将运行时关联到程序。要获取以kB为单位的值,请除以1024等等...对于其他大小也是如此。 - john
如果程序是Tomcat服务,我可以将其与之关联吗? - David Faizulaev

1

JVisualVM应该适用于您。在特定情况下,进程可能不会在visualVM中显示。

查看已知问题

本地应用程序无法被监视(启动时出错对话框)描述:在VisualVM启动后立即显示一个错误对话框,指出本地应用程序无法被监视。本地运行的Java应用程序显示为(pid ###)。 解决方案:如果用户名包含大写字母,则在Windows系统上可能会出现此问题。在这种情况下,用户名是UserName,但JDK创建的jvmstat目录是%TMP%\hsperfdata_username。为了解决这个问题,请退出所有Java应用程序,删除%TMP%\hsperfdata_username目录,并创建新的%TMP%\hsperfdata_UserName目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接