获取JAVA PID PHP
我目前正在托管一个java服务器程序(craftbukkit),似乎当我试图从服务器程序(craftbukkit)获取RAM使用情况时,它不会返回实际使用的RAM,而是返回它使用的RAM的一半左右。(虽然它并不总是精确的一半,所以用这种方法来估计实际的RAM使用量是不可能的) 我想知道如何获得java进程使用的实际RAM,如system monitor工具(在linux上)中所示,这样我就能够检索报告给系统的RAM使用量 我以前看到过一个使用进程PID的示例,但我不知道如何获取进程的PID,只知道进程的名称。(只有一个java实例正在运行,所以我们不必担心得到错误的结果) 提前谢谢 使用ps-ef | grep“java”,我得到以下输出获取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,只知
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“我的程序”