在运行时测量(Java应用程序的)峰值内存消耗?

时间:2018-09-17 09:14:22

标签: java ubuntu memory heap-memory

我必须在机器上运行几个Java服务才能获得特定的开发环境(并完成与Java不相关的工作)

IF_HTTP_REQUES

为了不耗尽内存,我需要限制内存使用量。默认值(512m afaik)对我的机器来说过高,因此我将它们降低了一些(以猜测为基础)。除了一种方法,我学会了艰难的方法(崩溃,甚至死机,以及幸运的是,项目文件夹中留下了一些.pid错误文件...),我最好提高一点:

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

问题:是否可以跟踪一段时间内某个应用的内存使用情况?

是通过某些Java命令行参数,还是带有java -Xmx800m -jar doo-app/target/doo-app-SNAPSHOT.jar ps -ae或类似的参数? (因此不必摆弄源代码本身,重新映射垃圾收集器等)

我看到了很多数字,但是弄清楚哪些数字属于哪个Java项目正在运行,什么可以大致​​指示出我正确的 peak 内存消耗(从htop的角度来看)。我不知道。

我在Ubuntu-MATE 16.04,x64下工作。

1 个答案:

答案 0 :(得分:0)

分析内存消耗的最佳方法是探查器。在您的jdk中,有jvisualvm profiler,对于此任务绝对足够。可以在此处找到(冗长的)教程:https://engineering.talkdesk.com/ninjas-guide-to-getting-started-with-visualvm-f8bff061f7e7

其他方法基本上是shot弹枪式的-减少xmx,然后在系统中生成负载,并查看它是否运行oom。如果没有顺畅的控制流,则无法预测已使用的内存。