获取JAVA PID PHP

时间:2014-01-30 16:42:38

标签: java php linux bash pid

我目前正在托管一个java服务器程序(craftbukkit),似乎当我尝试从服务器程序(craftbukkit)获取RAM使用时,它不会返回实际使用的RAM,而是在某个地方大约一半它正在使用什么。 (虽然它并不总是一半,所以用这种方式估算实际的RAM使用率是不可能的。)

我想知道如何获得java进程使用的实际RAM,如系统监视工具(在linux上)中所见,这样我就可以检索用于报告的RAM数量。系统

我之前看过一个使用进程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。

4 个答案:

答案 0 :(得分:0)

我能够通过以下

成功获得PID
ps -eo pid,comm | grep 'java$' | awk '{print $1}' | head -1

答案 1 :(得分:0)

如果您真的需要,可以尝试以下方法:

ps -ef | grep "java" | grep -v -i "grep" | cut -d ' ' -f 7

这将仅返回java进程的PID,并将排除您以此方式进行的grep调用。根据您的系统,最终可能需要对7进行一些调整。

它的作用是从ps -ef获取所有结果并过滤为仅包含java但不包含grep的结果。然后它会在每个空格处剪切结果,并返回字段7(其中7是结尾处的数字)

答案 2 :(得分:0)

使用ps,管道,grep a.o,您无需浪费时间。您所需要的只是pgrep

pgrep java

有关详细信息,请参阅man pgrep

答案 3 :(得分:0)

您还可以使用platform runtime MXBeangetName()方法从Java应用程序中检索PID:

import java.lang.management.ManagementFactory;

public class Pid {
  /**
   * Return the current process ID.
   * @return the pid as an int, or -1 if the pid could not be obtained.
   */
  public static int getPID() {
    int pid = -1;
    // we expect the name to be in '<pid>@hostname' format - this is JVM dependent
    String name = ManagementFactory.getRuntimeMXBean().getName();
    int idx = name.indexOf('@');
    if (idx >= 0) {
      String sub = name.substring(0, idx);
      try {
        pid = Integer.valueOf(sub);
        System.out.println("process name=" + name + ", pid=" + pid);
      } catch (Exception e) {
        System.out.println("could not parse '" + sub +"' into a valid integer pid :");
        e.printStackTrace();
      }
    }
    return pid;
  }
}