有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我必须在我的机器上运行几个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意义上)。。。我不知道

我在UbuntuMate 16.04x64下工作


共 (1) 个答案

  1. # 1 楼答案

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

    其他方法基本上是散弹枪式的——减少xmx,然后在系统中生成负载,看看它是否运行。如果你没有一个直接的控制流,你就无法预测使用的内存