因此,我正在远程容器上查看带有jmap的堆,并且我想对其进行强制垃圾收集。如何在不弹出jvisualvm或jconsole和 friend 的情况下执行此操作?

我知道您不应该进行强制垃圾回收的实践-您应该弄清楚为什么堆很大/越来越大。

我还意识到System.GC()实际上并没有强制垃圾回收-它只是告诉GC您希望它发生。

话虽如此,有没有一种方法可以轻松地做到这一点?我缺少一些命令行应用程序?

最佳答案

您可以通过免费的jmxterm程序执行此操作。

像这样启动它:

java -jar jmxterm-1.0-alpha-4-uber.jar

从那里,您可以连接到主机并触发GC:
$>open host:jmxport
#Connection to host:jmxport is opened
$>bean java.lang:type=Memory
#bean is set to java.lang:type=Memory
$>run gc
#calling operation gc of mbean java.lang:type=Memory
#operation returns:
null
$>quit
#bye

请查看jmxterm网站上的文档,以获取有关将其嵌入bash/perl/ruby​​/other脚本中的信息。我在Python中使用过popen2,在Perl中使用过open3来做到这一点。

更新:这是使用jmxterm的单线:
echo run -b java.lang:type=Memory gc | java -jar jmxterm-1.0-alpha-4-uber.jar -n -l host:port

10-07 19:17
查看更多