2014-01-30 7 views
-2

В настоящее время у меня есть серверная программа java (craftbukkit), и кажется, что когда я пытаюсь получить использование ОЗУ из серверной программы (craftbukkit), он не возвращает фактическую использованную ОЗУ, но скорее где-то около половины того, что он использует. (хотя это не всегда ровно половина, поэтому невозможно оценить фактическое использование ОЗУ таким образом).Получение JAVA PID PHP

Мне было интересно, как я могу получить реальную ОЗУ, используемую процессом java, как это видно в инструменте системного монитора (на linux), таким образом, я смогу получить объем ОЗУ, система.

Я видел пример, ранее использующий PID процесса, но я не знаю, как это сделать, чтобы получить PID процесса, зная только имя (только один экземпляр java запущен, t нужно беспокоиться о получении неправильного результата)

Спасибо заранее!

С 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" Консоль не возвращает никаких результатов. Хотя, насколько мне известно, он должен вернуть ПИД.

+0

Это может быть, что программа сообщает об использовании реальной памяти, но Java Выделяет/резервы больше. Я предлагаю вам взглянуть, как узнать, сколько памяти используется вашей ОС (я полагаю, Linux) и выполнить команду на PHP, которая анализирует это. –

+0

Когда я пытаюсь получить использование памяти изнутри программы, он возвращает LESS, чем выделенные отчеты ОС, а это не то значение, которое я хочу. Мне нужно значение, сообщаемое операционной системой, и я спрашиваю, КАК получить то, что ОС сообщает, как ИСПОЛЬЗУЕТСЯ, через php, БЕЗ ПИД-регулятора. Я знаю, что он сообщает об использовании реальной памяти, но мне нужно получить выделенную память. Вот что я прошу, КАК делать. Я знаю, что мне нужно делать, но не так .... –

+0

Если вы знаете имя, google для «использования Linux-памяти процесса 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 

Это будет возвращать только идентификатор процесса java-процесс, и будет исключать вызов grep, который вы делаете таким образом. Это может потребовать некоторой настройки 7 на конце, в зависимости от вашей системы.

Что он делает, принимает все результаты от ps -ef и фильтрует только те, которые содержат java, но не содержит grep. Затем он режет результат в каждом пространстве и возвращает поле 7 (где 7 - номер на конце)

0

Вам не нужно терять время с помощью ps, труб, grep a.o. Все, что вам нужно, это pgrep:

pgrep java 

Смотрите man pgrep для получения дополнительной информации.

0

Вы также можете получить PID из приложения Java, используя метод getName()platform runtime MXBean «s:

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; 
    } 
} 
Смежные вопросы