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

问题描述 投票:0回答:1

我必须在我的机器上运行几个java服务来获得某个开发环境(并完成我的非java相关工作)

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

为了不耗尽内存,我需要限制内存使用量。默认值(512米afaik)对我的机器来说太高了,所以我稍微降低了它们(在疯狂的猜测基础上)。除了一个,我学到了很难的方法(崩溃,甚至冻结,谢天谢地,项目文件夹中留下了一些.pid错误文件...),我更好地解决了一点:

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

问题:有没有办法跟踪某个应用程序的内存使用情况?

通过一些java命令行参数甚至与ps -aehtop或类似? (因此不会在源代码中摆弄,重新映射垃圾收集器等等)

我看到了很多数字,但是弄清楚哪个属于哪个java项目正在运行,哪些可以粗略地指示我正确的峰值内存消耗(在-Xmx___m意义上)......我不知道。

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

java ubuntu memory heap-memory
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.