Java 使用进程id获取进程的实际内存使用情况

Java 使用进程id获取进程的实际内存使用情况,java,memory,Java,Memory,我使用下面的linux命令来获取使用进程id的进程的实际内存使用情况 pmap -x pid | grep total 但它没有给出进程的正确内存分配大小。当我在java代码中使用下面的代码时,它给出了java进程的正确内存分配大小 Runtime runtime = Runtime.getRuntime(); runtime.gc(); long memory = runtime.totalMemory() - runtime.freeMemory(); 如何使用pid获得java进程的正

我使用下面的linux命令来获取使用进程id的进程的实际内存使用情况

pmap -x pid | grep total
但它没有给出进程的正确内存分配大小。当我在java代码中使用下面的代码时,它给出了java进程的正确内存分配大小

Runtime runtime = Runtime.getRuntime();
runtime.gc();
long memory = runtime.totalMemory() - runtime.freeMemory();

如何使用pid获得java进程的正确内存分配大小?

您可以使用JDK中的工具
jconsole
实时查看正在运行的java程序的内存分配。

您可以使用JDK中的工具
jconsole
实时查看正在运行的java程序的内存分配。

为什么认为第一个数字不正确吗?我使用java代码来获取内存不足错误。我在tomcat服务器中执行该代码并得到错误。然后我得到这个进程的pid,运行第一个命令,得到这三个值。( 3422472 712208 694980). 我得到这三个值中的最后一个KB值(694980),并将其转换为MB(接近694Mb)。在此之后,我增加服务器的堆大小(1024Mb),并再次运行代码。这个问题还没有解决。当我运行第二个代码时,它显示1041Mb是进程内存大小。当我将堆大小增加到2048Mb时,效果很好。@assylias请帮助我解决这个问题为什么您认为第一个数字不正确?我使用java代码来获取内存不足错误。我在tomcat服务器中执行该代码并得到错误。然后我得到这个进程的pid,运行第一个命令,得到这三个值。( 3422472 712208 694980). 我得到这三个值中的最后一个KB值(694980),并将其转换为MB(接近694Mb)。在此之后,我增加服务器的堆大小(1024Mb),并再次运行代码。这个问题还没有解决。当我运行第二个代码时,它显示1041Mb是进程内存大小。当我将堆大小增加到2048Mb时,效果很好。@assylias请帮助我解决此问题