Измерять пиковое потребление памяти (Java-приложения) во время выполнения? - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно запустить несколько java-сервисов на моей машине, чтобы получить определенную среду разработки (и выполнить свою работу, не связанную с java)

java -Xmx400m -jar foo-app/target/foo-app-SNAPSHOT.jar
java -Xmx250m -jar bar-app/target/bar-app-SNAPSHOT.jar
...

Чтобы не хватило памяти, мне нужно ограничить использование памяти. Значение по умолчанию (512 м в секунду) слишком велико для моей машины, поэтому я несколько снизил их (в качестве догадки). За исключением одного, где я изучил трудный путь (сбой, даже зависание, и, к счастью, некоторые файлы ошибок .pid, оставленные в папке проекта ...), который мне лучше установить немного выше:

java -Xmx800m -jar doo-app/target/doo-app-SNAPSHOT.jar

Вопрос : есть ли способ отслеживать использование памяти определенного приложения с течением времени?

Каким-то параметром командной строки Java или даже с ps -ae, htop или подобным? (таким образом, не возиться с самим источником, переназначать сборщики мусора и т. д. и т. д.)

Я вижу много цифр, но выясняю, какие из них принадлежат тому, какой Java-проект запущен, и что может примерно указать мне правильное пик потребление памяти (в смысле -Xmx___m) ... У меня есть без понятия.

Я работаю под Ubuntu-MATE 16.04, x64.

1 Ответ

0 голосов
/ 17 сентября 2018

Лучший способ проанализировать потребление памяти - это профилировщик. В вашем jdk есть профилировщик jvisualvm, которого вполне достаточно для этой задачи. (Длинный) учебник можно найти здесь: https://engineering.talkdesk.com/ninjas-guide-to-getting-started-with-visualvm-f8bff061f7e7

Другие подходы в основном в стиле дробовика - уменьшают xmx, а затем генерируют нагрузку в системе и проверяют, работает ли она. Если у вас НЕТ прямого потока управления, у вас нет возможности предсказать используемую память.

...