Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取JAVA PID PHP_Java_Php_Linux_Bash_Pid - Fatal编程技术网

获取JAVA PID PHP

获取JAVA PID PHP,java,php,linux,bash,pid,Java,Php,Linux,Bash,Pid,我目前正在托管一个java服务器程序(craftbukkit),似乎当我试图从服务器程序(craftbukkit)获取RAM使用情况时,它不会返回实际使用的RAM,而是返回它使用的RAM的一半左右。(虽然它并不总是精确的一半,所以用这种方法来估计实际的RAM使用量是不可能的) 我想知道如何获得java进程使用的实际RAM,如system monitor工具(在linux上)中所示,这样我就能够检索报告给系统的RAM使用量 我以前看到过一个使用进程PID的示例,但我不知道如何获取进程的PID,只知

我目前正在托管一个java服务器程序(craftbukkit),似乎当我试图从服务器程序(craftbukkit)获取RAM使用情况时,它不会返回实际使用的RAM,而是返回它使用的RAM的一半左右。(虽然它并不总是精确的一半,所以用这种方法来估计实际的RAM使用量是不可能的)

我想知道如何获得java进程使用的实际RAM,如system monitor工具(在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。

我能够通过以下操作成功地获得PID

ps -eo pid,comm | grep 'java$' | awk '{print $1}' | head -1

如果确实需要,您可以尝试以下方法:

ps -ef | grep "java" | grep -v -i "grep" | cut -d ' ' -f 7
这将只返回java进程的PID,并将排除以这种方式进行的
grep
调用。根据您的系统,可能需要对末尾的7进行一些调整


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

您不需要浪费时间使用
ps
、管道、
grep
a.o。您只需要
pgrep

pgrep java

有关更多信息,请参见
man pgrep

您还可以使用的
getName()
方法从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;
  }
}
导入java.lang.management.ManagementFactory;
公共类Pid{
/**
*返回当前进程ID。
*@以整数形式返回pid,如果无法获取pid,则返回-1。
*/
公共静态int getPID(){
int-pid=-1;
//我们希望名称采用“@hostname”格式-这取决于JVM
字符串名称=ManagementFactory.getRuntimeMXBean().getName();
int idx=name.indexOf('@');
如果(idx>=0){
String sub=name.substring(0,idx);
试一试{
pid=整数。值of(sub);
System.out.println(“进程名称=“+name+”,pid=“+pid”);
}捕获(例外e){
System.out.println(“无法将“'+sub+””解析为有效的整数pid:”;
e、 printStackTrace();
}
}
返回pid;
}
}

可能是程序报告了实际内存使用情况,但java分配/保留了更多内存。我建议您看看如何查看您的操作系统(我假设是Linux)使用了多少内存,并用PHP执行一个命令来解析它。当我试图从程序内部获取内存使用情况时,它返回的内存少于分配的操作系统报告,这不是我想要的值。我需要操作系统报告的值,我要问的是如何通过php获得操作系统报告的内容,而不需要PID。我知道它在报告实际内存使用情况,但我需要获得分配的内存。这就是我要问的。我知道我需要做什么,但不知道如何做……如果你知道名称,谷歌搜索“linux获取进程内存使用率”并检查“grep”的功能……我只发现使用PID获取内存使用率的结果,而不是进程名称。我的意思是,我到底为什么要先用谷歌搜索,这并不是说这比向别人寻求帮助更快……*显而易见的讽刺应该是显而易见的*正如所说的,如果你知道你的程序名,你可以得到PID:
ps-ef | grep“我的程序”