#java #grails #groovy
#java #grails #groovy
Вопрос:
Каков наилучший способ определить текущее использование PermGen в приложении Grails?
Я пытаюсь сделать некоторые графики
Runtime.getRuntime().freeMemory();
Runtime.getRuntime().totalMemory();
И я хотел бы также измерить свободное пространство PermGen. Большинство результатов search engine Stack Overflow по этому вопросу касаются обработки ошибок, подобных PermGenOutOfMemory, я просто хотел бы получить доступ к статистике по ним.
Ответ №1:
Просто подключитесь к нему с помощью JConsole или VisualVM. У вас нет возможности программно определить размер PermGen в вашем приложении. Вы можете использовать MemoryMXBean для создания простых отчетов о памяти, но придерживайтесь использования инструментов, о которых я упоминал, для получения более подробной картины.
Комментарии:
1. Может быть, ссылка на руководство ?
2. Видите ли, я бы предпочел, если бы в приложении был способ, которым я мог бы это определить, таким образом, я мог бы просто и автоматически передавать это в базу данных для создания отчетов. Но, спасибо, MemoryMXBean выглядит как шаг в правильном направлении.
Ответ №2:
Я думаю, вы должны попробовать это
public class Main {
public static void main(final String[] args) {
final RuntimeMXBean memMXBean = ManagementFactory.getRuntimeMXBean();
final String prefix = "-XX:MaxPermSize=";
final List<String> jvmArgs = memMXBean.getInputArguments();
String maxPermSize = null;
for (final String jvmArg : jvmArgs) {
if (jvmArg.startsWith(prefix)) {
maxPermSize = jvmArg.substring(prefix.length());
break;
}
}
System.out.println("MaxPermSize is " maxPermSize);
}
}
Ответ №3:
Я думаю, что источником может быть ManagementFactory, один из пулов, возвращаемых из List getMemoryPoolMXBeans(), должен быть PermGen.
Комментарии:
1. Я могу ошибаться здесь — но я не думаю, что PermGen сообщается.