Как получать периодические дампы кучи для моей Java-программы через равные промежутки времени в формате csv (без jprofiler)

Я хотел получать дампы кучи для своего универсального Java-приложения через равные промежутки времени в виде CSV-файлов. Допустим, у меня есть программа

public class Test {

  public static void main(String[] args) throws Exception {
    // Code to be profiled
  }
}

Я хотел регулярно проверять дампы кучи после запуска программы и генерировать csv, как показано ниже.

Time  Committed size    Free size   Used size
0.0     251392000       235881000   15511000
1.0     456704000       264288000   192416000
2.0     1024000000      756641000   267359000
3.01    1035776000      217595000   818181000
4.01    1494528000      153111000   1341417000
5.02    1444352000      1235099000  209253000
6.02    1546240000      1185698000  360542000

Это похоже на информацию, которая передается в visualvm/jprofiler и т. д. для создания диаграмм дампа памяти.

Я мог бы легко добиться этого программно (через строку cmd и jprofiler api), используя jprofiler с jcontroller и jpexport , но я не смог понять, как сделать то же самое с другими подобными инструментами, такими как visualvm , jmap и т. д.

Я ищу программный способ профилирования java-программы (здесь Test.java) без использования графического интерфейса. Аналогичный вопрос задан здесь , но предлагаемое решение - это плагин Tracer для visualvm, который снова потребует использования графического интерфейса. Самое близкое решение, которое я нашел, — это использовать JMX, как в данном примере здесь, но я не мог заставить его работать на меня.

Есть ли способ добиться этого для меня? В качестве примечания я использую Java SE 8 на Mac.


person 95_96    schedule 19.10.2020    source источник
comment
Это не дамп кучи и не CSV-файл. Кроме того, когда вы попробовали JMX, но «не смогли заставить его работать», вы должны показать, что вы пробовали и какие проблемы возникли.   -  person Holger    schedule 11.02.2021