У меня есть Linux-система, в которой у меня есть JVM, и она используется тремя процессами java.
/home/codesrc>java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
Итак, у меня есть 3 процесса с использованием той же JRE. каждый из этих процессов имеет свою собственную память, определенную в командной строке при установке как
java -Xms256m -Xmx1024m -cp $CLASSPATH <class name>
java -Xms256m -Xmx512m -cp $CLASSPATH <class name>
java -Xms256m -Xmx705m -cp $CLASSPATH <class name>
Память на Linux-системе составляет 4 ГБ. Я пытаюсь найти использование кучи отдельно для каждого из этих процессов. Поскольку у меня нет JDK в системе, я не могу использовать jmap, jconsole или jstack. Я пытался
Runtime.getRuntime().totalMemory()
но это не дает мне основанный на процессе, а также вывод для вышеизложенного не видит права. У любого есть идея о том, как проверить использование кучи, когда только с использованием JRE, что эквивалентно
jmap -heap <PID>
Вы ищете текущее использование памяти вашего текущего процесса? Вы пробовали следующее?
Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()
Лучше всего включить агент JMX при запуске виртуальной машины Java на вашем сервере и использовать хост с JConsole для подключения.
В качестве альтернативы вы можете использовать локальное приложение, которое использует JMX для извлечения деталей (см. Другой вопрос):
List memBeans = ManagementFactory.getMemoryPoolMXBeans();
for (Iterator i = memBeans.iterator(); i.hasNext(); ) {
MemoryPoolMXBean mpool = (MemoryPoolMXBean)i.next();
MemoryUsage usage = mpool.getUsage();
String name = mpool.getName();
float init = usage.getInit()/1000;
float used = usage.getUsed()/1000;
float committed = usage.getCommitted()/1000;
float max = usage.getMax()/1000;
float pctUsed = (used / max)*100;
float pctCommitted = (committed / max)*100;
}