2014-01-30 89 views
-2

我目前正在託管一個java服務器程序(craftbukkit),並且似乎當我嘗試從服務器程序(craftbukkit)獲取RAM使用時,它不會返回實際使用的RAM,但而是大約一半的使用。 (雖然它並不總是一半,所以不可能以這種方式估計實際的RAM使用量)。獲取JAVA PID PHP

我想知道如何獲得Java進程使用的實際RAM,如系統監視器工具(在Linux上)所示,這樣我就能夠檢索用於報告的RAM量系統。我只看到一個以前使用過程PID的例子,但我不知道如何去獲取進程的PID,只知道名字(只有一個java實例正在運行,所以我們不會去做,不必擔心得到錯誤的結果)

提前致謝!

用ps -ef | grep「java」我得到以下輸出

[email protected]:~$ 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。

+0

這可能是因爲該程序報告的實際內存使用率但Java分配量/儲量更多。我建議你看看如何看看你的操作系統使用了多少內存(我認爲是Linux),然後在PHP中執行一個解析該內存的命令。 –

+0

當我嘗試從程序內部獲取內存使用量時,它會返回LESS,而不是分配的操作系統報告,這不是我想要的值。我需要操作系統報告的值,我問的是如何通過php獲取操作系統報告爲USED的內容,而不是PID。我知道它報告真實的內存使用情況,但我需要分配內存。這就是我要問的問題。我知道我需要做什麼,但不知道如何...... –

+0

如果您知道名稱,google爲「linux獲取進程內存使用情況」並檢查「grep」是幹什麼的... –

回答

0

我能成功地得到PID與以下

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

你可以嘗試以下方法,如果你真的需要得到它:

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

這隻會返回的PID java進程,並且將排除您以此方式進行的grep調用。根據您的系統,最終可能需要對7進行一些調整。

它的作用是從ps -ef獲取所有結果並過濾到僅包含java但不包含grep的結果。然後它會在每個空格處剪切結果,並返回字段7(其中7是末尾的數字)

0

您不需要浪費時間與ps,管道,grep a.o.所有你需要的是pgrep

pgrep java 

更多信息,請參見man pgrep

0

您還可以從您的Java應用程序獲取PID,使用platform runtime MXBeangetName()方法:

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; 
    } 
}