繁体   English   中英

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

[英]Measure peak memory consumption (of a Java Application) at runtime?

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

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

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

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

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

通过某些Java命令行参数,或者甚至使用ps -aehtop或类似参数? (因此不必摆弄源代码本身,重新映射垃圾收集器等)

我看到了很多数字,但是弄清楚哪个属于哪个java项目正在运行,什么大致可以指示出我的内存使用量达到了峰值 (在-Xmx___m意义上)...我不知道。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM