【发布时间】:2014-01-31 15:19:19
【问题描述】:
我目前正在托管一个 java 服务器程序 (craftbukkit),似乎当我尝试从服务器程序 (craftbukkit) 获取 RAM 使用情况时,它不会返回实际使用的 RAM,而是大约一半它正在使用什么。 (虽然它并不总是正好是一半,所以不可能以这种方式估计实际的 RAM 使用量)。
我想知道如何获取 java 进程使用的实际 RAM,如系统监视器工具(在 linux 上)中所见,这样我就可以检索报告给系统。
我之前看到一个使用进程PID的例子,但是我不知道如何获取进程的PID,只知道名称。(只有一个java实例在运行,所以我们不不必担心得到错误的结果)
提前谢谢!
使用 ps -ef | grep "java" 我得到以下输出
prodynamics@prodynamics:~$ ps -ef | grep "java"
1000 22292 29385 75 12:08 pts/0 00:42:19 java -Xmx3100M -Xms1024M -XX:MaxPermSize=248m -jar craftbukkit.jar
1000 23544 23443 0 13:04 pts/2 00:00:00 grep java
但是使用 ps -eo pid | grep “java” 控制台根本不返回任何结果。虽然据我了解,它应该返回 PID。
【问题讨论】:
-
可能是程序正在报告实际内存使用情况,但 java 分配/保留更多。我建议你看看如何查看你的操作系统(我假设是 Linux)正在使用多少内存并在 PHP 中执行一个解析它的命令。
-
当我尝试从程序内部获取内存使用情况时,它返回比操作系统报告分配的更少,这不是我想要的值。我需要操作系统报告的值,我要问的是如何在没有 PID 的情况下通过 php 获取操作系统报告为已使用的值。我知道它正在报告实际内存使用情况,但我需要分配内存。这就是我要问的如何做。我知道我需要做什么,但不知道如何......
-
如果你知道名字,谷歌“linux获取进程内存使用情况”并检查“grep”的作用......
-
我只找到显示使用 PID 获取内存使用情况的结果,而不是进程名称。我的意思是,我到底为什么要先谷歌,这并不比向某人寻求帮助更快....*明显的讽刺应该是显而易见的*
-
如前所述,如果你知道你的程序的名字,你可以得到PID:
ps -ef | grep "my program"