如何向VisualVM提供JVM参数?

105

我正在使用来自JDK 1.6.0_26的VisualVM对在Tomcat下运行的Java Web应用程序进行性能剖析,但VisualVM经常告诉我它没有足够的内存来拍摄快照,并要求我使用-Xmx开关提供更多内存给Netbeans。问题是,我正在Netbeans之外运行VisualVM,那么我该如何为jvisualvm.exe提供JVM参数?

6个回答

146

应该能够在%JDK_HOME%\lib\visualvm\etc\visualvm.conf中修改内存设置。

XmsXmx位于default_options行中。


2
在(我的副本中 :) OSX: /System/Library/Java/Support/VisualVM.bundle/Contents/Home/etc/visualvm.conf - Jonas N
@Zack,你能确认一下-J-Xms-J-Xmx是正确的选项名称吗?在配置文件中指定时,是否需要使用-J前缀? - GreenGiant
@GreenGiant 我不确定它们是否是或不是...在我的visualvm.conf副本中,我有-J-Xms24m-J-Xmx256m,所以我认为这是正确的选项名称。你可以通过谷歌搜索如何格式化visualvm.conf来获取更多信息... - Zack Macomber
@Zack 我的配置文件也是一样的。只是想确认一下,因为你的回答没有包括“-J”前缀。 - GreenGiant
请注意,在Linux上(包括Mint和Ubuntu),VisualVM的配置文件路径为/usr/lib/jvm/java-6-sun/lib/visualvm/etc/visualvm.conf - David Moles
在我的最新的OS X 10.11上:/Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/lib/visualvm/etc/visualvm.conf。 - Dmitry

59

我认为这个方法也可以:

jvisualvm.exe -J-Xmx512m (或者你需要的任何数量)

在 .exe 命令行上使用 -J 进行一次性设置,或者在其他答案中提到的 .conf 文件用于更改默认值。


我无法让它工作。我尝试从命令提示符中运行 jvisualvm.exe -J-Xms256m -J-Xmx1024m,但在检查进程时,我发现参数未被应用。 - Mike Partridge
3
我刚试了一下,它似乎是在追加它。所以我看到默认的192m和另外一个1024m的条目。看起来后者优先级更高。使用的JDK版本是什么? - Kevin Welker
我正在使用1.6.0_26版本。当使用JConsole检查VisualVM进程时,在VM Summary选项卡上的VM arguments部分显示了默认值和我提供的值,但是当使用VisualVM检查自身时,在Overview > JVM arguments中仅报告了默认值。 - Mike Partridge
我正在使用1.6.0_20版本,看到有两行列出了Xmx。第一行是默认值,后面的是新值。我直接从你上面的评论中复制了你的命令行,以确保正确。在概述>JVM的输出包括:-Xms24m -Xmx192m -Dsun.jvmstat.perdata.syncWaitMs=10000 -Xms256m -Xmx1024m - Kevin Welker
请问一下,-J 的意思是什么?谢谢。 - Diego Ramos

34
我会尽力完成你的请求,请告诉我需要翻译成什么语言。
jvisualvm -J-Xms1024m -J-Xmx2048m

而且它起作用了。


我喜欢这个,因为.conf文件的位置已经改变,但是它仍然可以工作,并且可能对其他一些Java程序也适用。与上面的评论相反,对于Mac用户来说并不难找到。全世界都在使用谷歌,这就把我们带到了这里。 - George Co
如下注释所述,在 jvisualvm 中查看 VM args 时似乎无效,但实际上它确实有效。我再也没有遇到 OOM 错误了。 - George Co
请问一下,-J 的意思是什么?谢谢。 - Diego Ramos
这是很久以前的事了,我已经不记得我的来源了。但是如果你看一下这个页面上的所有其他答案,你会注意到每个传递给jvisualvm的参数都以-J开头,这有点像转义序列,表示接下来的参数不是要被jvisualvm本身处理,而是用于修改jvisualvm使用的JVM。 - Kevin Welker

31
在Mac中,您可以通过编辑以下文件来配置它们。
/Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf
visualvm_default_options="-J-client -J-Xms4096m -J-Xmx5120m -J-XX:+IgnoreUnrecognizedVMOptions -J-Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true"

请将您的回答集中于解决方案。如果您想要添加元信息,请在注释中添加。 - Martijn Pieters
而且,如果你的问题标记为[tag:windows],那么对于Mac用户来说,他们很难找到你的答案。考虑无论如何都要将其作为一个新问题提出。 - Martijn Pieters
我没有对这篇文章投票,请不要草率下结论。 - Martijn Pieters
你为什么要对这个答案进行不必要的编辑呢?是为了获得更多的声望吗?这个答案已经非常明确和清晰了。顺便说一下,每次你的编辑都会让我被评价降低! - aspdeepak
2
我在这里进行了一次编辑,并清楚地说明了为什么这样做。如果您坚持要向针对Windows用户的问题添加仅适用于Mac的答案,那没问题,但请不要将元信息包含其中;您的帖子应该只包含解决方案,而不是投票建议。 - Martijn Pieters
如果您正在使用JDK安装的一部分JVisualVm,则它可能位于类似/Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contents/Home/lib/visualvm/etc/visualvm.conf的路径上。 - Shannon

2

更新:

根据@Kranach的评论,新路径为/Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf。在此配置文件中,您可以更改

visualvm_default_options="-J-client -J-Xms24m -J-Xmx256m

为(例如)

visualvm_default_options="-J-client -J-Xms24m -J-Xmx2048m

旧答案:对于Mac OSX 10.12+

如果您已从https://visualvm.github.io/download.html下载了visualvm dmg并将其移动到Applications目录。您可以在位置Applications/VisualVM.app/Contents/etc/visualvm.conf下找到配置文件visualvm.conf。在此配置文件中,您可以更改

visualvm_default_options="-J-client -J-Xms24m -J-Xmx256m

为(例如)

visualvm_default_options="-J-client -J-Xms24m -J-Xmx2048m


2
在我的 Mac 上,它是 /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf。 - Kranach
我可以确认Kranach的评论,这是新路径。 - Florian Kirmaier

2
在VisualVM 2中,配置文件位于下载文件提取的VisualVM目录下的etc/visualvm.conf
${VISUALVM}/etc/visualvm.conf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接